HSBC Capabilities
Naftiko 0.5 capability definitions for HSBC - 100 capabilities showing integration workflows and service orchestrations.
Screens high-value transactions for anti-money laundering compliance by querying Snowflake transaction data, running AML checks, and alerting the compliance team via Teams.
naftiko: "0.5"
info:
label: "AML Transaction Screening Orchestrator"
description: "Screens high-value transactions for anti-money laundering compliance by querying Snowflake transaction data, running AML checks, and alerting the compliance team via Teams."
tags:
- compliance
- aml
- snowflake
- microsoft-teams
- banking
capability:
exposes:
- type: mcp
namespace: aml-screening
port: 8080
tools:
- name: screen-transaction
description: "Given a transaction reference, pull transaction details from Snowflake, run AML screening, and alert compliance via Teams if flagged."
inputParameters:
- name: transaction_ref
in: body
type: string
description: "The transaction reference number."
steps:
- name: get-transaction
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM banking.transactions WHERE ref = '{{transaction_ref}}'"
- name: screen-aml
type: call
call: "aml-service.screen"
with:
amount: "{{get-transaction.amount}}"
counterparty: "{{get-transaction.counterparty}}"
country: "{{get-transaction.country}}"
- name: notify-compliance
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.compliance_channel_id"
message: "AML screening for {{transaction_ref}}: {{screen-aml.result}} (score: {{screen-aml.risk_score}})"
consumes:
- type: http
namespace: snowflake
baseUri: "https://hsbc.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: aml-service
baseUri: "https://aml-api.hsbc.com/v1"
authentication:
type: bearer
token: "$secrets.aml_token"
resources:
- name: screening
path: "/screen"
operations:
- name: screen
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Submits HSBC regulatory filings and compliance documents to the Anthropic API for AI-powered summarization and stores the result in SharePoint for compliance team review.
naftiko: "0.5"
info:
label: "Anthropic Regulatory Document Summarization"
description: "Submits HSBC regulatory filings and compliance documents to the Anthropic API for AI-powered summarization and stores the result in SharePoint for compliance team review."
tags:
- ai
- compliance
- document-management
- anthropic
- sharepoint
- banking
capability:
exposes:
- type: mcp
namespace: ai-compliance
port: 8080
tools:
- name: summarize-regulatory-document
description: "Given a SharePoint URL of an HSBC regulatory filing or compliance document, retrieve the content, send to Anthropic API for concise summarization, and save the summary to SharePoint for compliance team review."
inputParameters:
- name: document_url
in: body
type: string
description: "The SharePoint URL of the regulatory document to summarize."
- name: site_id
in: body
type: string
description: "The SharePoint site ID where the summary should be stored."
steps:
- name: get-document
type: call
call: "sharepoint-doc.get-file-content"
with:
document_url: "{{document_url}}"
- name: generate-summary
type: call
call: "anthropic.create-message"
with:
model: "claude-opus-4-5"
prompt: "Summarize the following HSBC regulatory document, highlighting key obligations, deadlines, and required actions: {{get-document.content}}"
- name: save-summary
type: call
call: "sharepoint-save.create-page"
with:
site_id: "{{site_id}}"
title: "AI Compliance Summary: {{get-document.filename}}"
content: "{{generate-summary.completion}}"
consumes:
- type: http
namespace: sharepoint-doc
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/sites/{{site_id}}/drive/root:/{{document_url}}:/content"
inputParameters:
- name: site_id
in: path
- name: document_url
in: path
operations:
- name: get-file-content
method: GET
- type: http
namespace: anthropic
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: create-message
method: POST
- type: http
namespace: sharepoint-save
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: pages
path: "/sites/{{site_id}}/pages"
inputParameters:
- name: site_id
in: path
operations:
- name: create-page
method: POST
Handles API gateway rate limit breaches by pulling Datadog metrics, creating a Jira investigation ticket, and notifying the platform team via Teams.
naftiko: "0.5"
info:
label: "API Gateway Rate Limit Breach Handler"
description: "Handles API gateway rate limit breaches by pulling Datadog metrics, creating a Jira investigation ticket, and notifying the platform team via Teams."
tags:
- api-management
- monitoring
- datadog
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: api-ops
port: 8080
tools:
- name: handle-rate-limit-breach
description: "Given a Datadog monitor ID for rate limit breaches, pull metrics, create a Jira ticket, and notify the platform team."
inputParameters:
- name: monitor_id
in: body
type: string
description: "The Datadog monitor ID."
steps:
- name: get-monitor
type: call
call: "datadog.get-monitor"
with:
monitor_id: "{{monitor_id}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "PLATFORM"
summary: "API rate limit breach: {{get-monitor.name}}"
description: "Monitor: {{monitor_id}}. Status: {{get-monitor.overall_state}}. Message: {{get-monitor.message}}"
issuetype: "Task"
priority: "High"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.platform_channel_id"
message: "API rate limit breach detected: {{get-monitor.name}}. Jira: {{create-ticket.key}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: jira
baseUri: "https://hsbc.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Syncs application dependency data between ServiceNow CMDB and Datadog service map, creating Jira tickets for unmapped dependencies.
naftiko: "0.5"
info:
label: "Application Dependency Mapping Sync"
description: "Syncs application dependency data between ServiceNow CMDB and Datadog service map, creating Jira tickets for unmapped dependencies."
tags:
- itsm
- operations
- servicenow
- datadog
- jira
capability:
exposes:
- type: mcp
namespace: cmdb-ops
port: 8080
tools:
- name: sync-dependency-map
description: "Given a ServiceNow application CI, compare dependencies with Datadog service map and create tickets for discrepancies."
inputParameters:
- name: app_ci_id
in: body
type: string
description: "The ServiceNow application CI sys_id."
steps:
- name: get-cmdb-deps
type: call
call: "servicenow.get-dependencies"
with:
ci_id: "{{app_ci_id}}"
- name: get-datadog-deps
type: call
call: "datadog.get-service-dependencies"
with:
service: "{{get-cmdb-deps.service_name}}"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "CMDB"
summary: "Dependency map discrepancy: {{get-cmdb-deps.service_name}}"
description: "CMDB deps: {{get-cmdb-deps.count}}. Datadog deps: {{get-datadog-deps.count}}. Review and reconcile."
issuetype: "Task"
priority: "Medium"
consumes:
- type: http
namespace: servicenow
baseUri: "https://hsbc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: dependencies
path: "/table/cmdb_rel_ci"
operations:
- name: get-dependencies
method: GET
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v2"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: service-map
path: "/services/{{service}}/dependencies"
inputParameters:
- name: service
in: path
operations:
- name: get-service-dependencies
method: GET
- type: http
namespace: jira
baseUri: "https://hsbc.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Queries Azure Cost Management for HSBC resource groups exceeding budget thresholds and posts a weekly FinOps cost digest to the cloud governance Teams channel.
naftiko: "0.5"
info:
label: "Azure Cost Anomaly Reporting"
description: "Queries Azure Cost Management for HSBC resource groups exceeding budget thresholds and posts a weekly FinOps cost digest to the cloud governance Teams channel."
tags:
- cloud
- finops
- azure
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: finops-reporting
port: 8080
tools:
- name: publish-azure-cost-report
description: "Query Azure Cost Management for HSBC resource groups exceeding budget thresholds and post a weekly FinOps cost digest to the cloud governance channel in Microsoft Teams."
inputParameters:
- name: subscription_id
in: body
type: string
description: "The Azure subscription ID to query costs for."
- name: billing_period
in: body
type: string
description: "The billing period in YYYYMM format, e.g. 202603."
steps:
- name: get-cost-data
type: call
call: "azure-cost.get-usage-details"
with:
subscription_id: "{{subscription_id}}"
billing_period: "{{billing_period}}"
- name: post-report
type: call
call: "msteams-finops.post-channel-message"
with:
channel_id: "$secrets.finops_channel_id"
message: "HSBC Azure cost report for {{billing_period}}: Total {{get-cost-data.total_cost}} {{get-cost-data.currency}}. Top group: {{get-cost-data.top_group}}."
consumes:
- type: http
namespace: azure-cost
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: usage-details
path: "/subscriptions/{{subscription_id}}/providers/Microsoft.Consumption/usageDetails"
inputParameters:
- name: subscription_id
in: path
- name: billing_period
in: query
operations:
- name: get-usage-details
method: GET
- type: http
namespace: msteams-finops
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves the health status of a specified Azure resource in HSBC's cloud infrastructure, returning availability state and summary.
naftiko: "0.5"
info:
label: "Azure Resource Health Lookup"
description: "Retrieves the health status of a specified Azure resource in HSBC's cloud infrastructure, returning availability state and summary."
tags:
- cloud
- azure
- monitoring
- lookup
capability:
exposes:
- type: mcp
namespace: cloud-health
port: 8080
tools:
- name: get-resource-health
description: "Given an Azure resource ID, return the availability status, summary, and last reported time."
inputParameters:
- name: resource_id
in: body
type: string
description: "The full Azure resource ID."
call: azure.get-resource-health
with:
resource_id: "{{resource_id}}"
outputParameters:
- name: availability_state
type: string
mapping: "$.properties.availabilityState"
- name: summary
type: string
mapping: "$.properties.summary"
- name: reported_time
type: string
mapping: "$.properties.reportedTime"
consumes:
- type: http
namespace: azure
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: resource-health
path: "/{{resource_id}}/providers/Microsoft.ResourceHealth/availabilityStatuses/current?api-version=2023-07-01"
inputParameters:
- name: resource_id
in: path
operations:
- name: get-resource-health
method: GET
Retrieves current 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 current market data for a given security from Bloomberg Enterprise Data, returning last price, bid, ask, and volume."
tags:
- trading
- market-data
- bloomberg
- lookup
capability:
exposes:
- type: mcp
namespace: market-data
port: 8080
tools:
- name: get-security-price
description: "Given a Bloomberg security identifier, return the last price, bid, ask, and trading volume."
inputParameters:
- name: security_id
in: body
type: string
description: "Bloomberg security identifier, e.g. 'HSBA LN Equity'."
call: bloomberg.get-market-data
with:
securities: "{{security_id}}"
outputParameters:
- name: last_price
type: number
mapping: "$.data[0].last_price"
- name: bid
type: number
mapping: "$.data[0].bid"
- name: ask
type: number
mapping: "$.data[0].ask"
- name: volume
type: number
mapping: "$.data[0].volume"
consumes:
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: market-data
path: "/market-data/{{securities}}"
inputParameters:
- name: securities
in: path
operations:
- name: get-market-data
method: GET
Orchestrates corporate client onboarding document collection by creating a Salesforce opportunity, sending DocuSign envelopes, and tracking in ServiceNow.
naftiko: "0.5"
info:
label: "Client Onboarding Document Collection"
description: "Orchestrates corporate client onboarding document collection by creating a Salesforce opportunity, sending DocuSign envelopes, and tracking in ServiceNow."
tags:
- banking
- onboarding
- salesforce
- docusign
- servicenow
capability:
exposes:
- type: mcp
namespace: client-onboarding
port: 8080
tools:
- name: initiate-document-collection
description: "Given a Salesforce opportunity ID, send DocuSign envelopes for required documents and create a ServiceNow tracking ticket."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity ID."
steps:
- name: get-opportunity
type: call
call: "salesforce.get-opportunity"
with:
opportunity_id: "{{opportunity_id}}"
- name: send-envelope
type: call
call: "docusign.create-envelope"
with:
recipient_email: "{{get-opportunity.Contact_Email__c}}"
recipient_name: "{{get-opportunity.Contact_Name__c}}"
template_id: "$secrets.onboarding_template_id"
- name: create-tracker
type: call
call: "servicenow.create-request"
with:
short_description: "Client onboarding docs: {{get-opportunity.Name}}"
description: "DocuSign envelope: {{send-envelope.envelopeId}}. Opportunity: {{opportunity_id}}"
category: "client_onboarding"
consumes:
- type: http
namespace: salesforce
baseUri: "https://hsbc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: get-opportunity
method: GET
- type: http
namespace: docusign
baseUri: "https://na4.docusign.net/restapi/v2.1"
authentication:
type: bearer
token: "$secrets.docusign_token"
resources:
- name: envelopes
path: "/accounts/$secrets.docusign_account_id/envelopes"
operations:
- name: create-envelope
method: POST
- type: http
namespace: servicenow
baseUri: "https://hsbc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
Monitors Azure resource utilization via Datadog, triggers Terraform scaling, and notifies the SRE team via PagerDuty.
naftiko: "0.5"
info:
label: "Cloud Infrastructure Scaling Orchestrator"
description: "Monitors Azure resource utilization via Datadog, triggers Terraform scaling, and notifies the SRE team via PagerDuty."
tags:
- cloud
- infrastructure
- datadog
- terraform
- pagerduty
capability:
exposes:
- type: mcp
namespace: infra-scaling
port: 8080
tools:
- name: scale-infrastructure
description: "Given a Datadog alert for high utilization, trigger Terraform workspace run for scaling and notify SRE via PagerDuty."
inputParameters:
- name: datadog_alert_id
in: body
type: string
description: "The Datadog alert ID indicating high utilization."
- name: workspace_name
in: body
type: string
description: "The Terraform Cloud workspace for scaling."
steps:
- name: get-alert
type: call
call: "datadog.get-alert"
with:
alert_id: "{{datadog_alert_id}}"
- name: trigger-scaling
type: call
call: "terraform.create-run"
with:
workspace_name: "{{workspace_name}}"
message: "Auto-scaling triggered by Datadog alert {{datadog_alert_id}}"
- name: notify-sre
type: call
call: "pagerduty.create-incident"
with:
title: "Auto-scaling triggered: {{get-alert.title}}"
service_id: "$secrets.sre_service_id"
urgency: "low"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v2"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: alerts
path: "/alerts/{{alert_id}}"
inputParameters:
- name: alert_id
in: path
operations:
- name: get-alert
method: GET
- 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: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
Retrieves a Confluence page by ID and returns the title, body content, and last modified date for HSBC knowledge management.
naftiko: "0.5"
info:
label: "Confluence Page Lookup"
description: "Retrieves a Confluence page by ID and returns the title, body content, and last modified date for HSBC knowledge management."
tags:
- knowledge
- confluence
- lookup
capability:
exposes:
- type: mcp
namespace: knowledge-lookup
port: 8080
tools:
- name: get-confluence-page
description: "Given a Confluence page ID, return the page title, body content, and last modified date."
inputParameters:
- name: page_id
in: body
type: string
description: "The Confluence page ID."
call: confluence.get-page
with:
page_id: "{{page_id}}"
outputParameters:
- name: title
type: string
mapping: "$.title"
- name: body
type: string
mapping: "$.body.storage.value"
- name: last_modified
type: string
mapping: "$.version.when"
consumes:
- type: http
namespace: confluence
baseUri: "https://hsbc.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: pages
path: "/content/{{page_id}}?expand=body.storage,version"
inputParameters:
- name: page_id
in: path
operations:
- name: get-page
method: GET
Identifies expiring vendor contracts in SAP, creates Salesforce renewal opportunities, and notifies procurement managers via Teams.
naftiko: "0.5"
info:
label: "Contract Renewal Reminder Orchestrator"
description: "Identifies expiring vendor contracts in SAP, creates Salesforce renewal opportunities, and notifies procurement managers via Teams."
tags:
- procurement
- contracts
- sap
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: contract-ops
port: 8080
tools:
- name: process-contract-renewals
description: "Given a days-to-expiry threshold, find expiring SAP contracts, create Salesforce opportunities, and notify procurement."
inputParameters:
- name: days_threshold
in: body
type: number
description: "Number of days until expiry to trigger renewal process."
steps:
- name: find-expiring
type: call
call: "sap-erp.get-expiring-contracts"
with:
days_ahead: "{{days_threshold}}"
- name: create-opportunity
type: call
call: "salesforce.create-opportunity"
with:
Name: "Contract renewal: {{find-expiring.vendor_name}}"
StageName: "Renewal"
CloseDate: "{{find-expiring.expiry_date}}"
- name: notify-procurement
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.procurement_channel_id"
message: "Contract renewal due: {{find-expiring.vendor_name}} expires {{find-expiring.expiry_date}}. Salesforce opportunity: {{create-opportunity.id}}"
consumes:
- type: http
namespace: sap-erp
baseUri: "https://hsbc-s4.sap.com/sap/opu/odata/sap/API_CONTRACT"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: contracts
path: "/A_Contract"
operations:
- name: get-expiring-contracts
method: GET
- type: http
namespace: salesforce
baseUri: "https://hsbc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
operations:
- name: create-opportunity
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Detects suspicious corporate card transactions from Snowflake, creates a Salesforce case, and alerts the fraud team via PagerDuty.
naftiko: "0.5"
info:
label: "Corporate Card Fraud Detection Workflow"
description: "Detects suspicious corporate card transactions from Snowflake, creates a Salesforce case, and alerts the fraud team via PagerDuty."
tags:
- fraud
- compliance
- snowflake
- salesforce
- pagerduty
capability:
exposes:
- type: mcp
namespace: fraud-ops
port: 8080
tools:
- name: detect-card-fraud
description: "Given a transaction batch ID, query Snowflake for anomalous transactions, create a Salesforce fraud case, and alert the fraud team."
inputParameters:
- name: batch_id
in: body
type: string
description: "The transaction batch ID to screen."
steps:
- name: query-anomalies
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM fraud.card_anomalies WHERE batch_id = '{{batch_id}}' AND risk_score > 80"
- name: create-case
type: call
call: "salesforce.create-case"
with:
Subject: "Suspected card fraud - batch {{batch_id}}"
Description: "{{query-anomalies.row_count}} suspicious transactions detected."
Priority: "Critical"
- name: alert-fraud-team
type: call
call: "pagerduty.create-incident"
with:
title: "Card fraud alert: {{query-anomalies.row_count}} anomalies in batch {{batch_id}}"
service_id: "$secrets.fraud_service_id"
urgency: "high"
consumes:
- type: http
namespace: snowflake
baseUri: "https://hsbc.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: salesforce
baseUri: "https://hsbc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
Runs due diligence on correspondent banking relationships by pulling entity data from Salesforce, running screening checks, and logging in ServiceNow.
naftiko: "0.5"
info:
label: "Correspondent Banking Due Diligence"
description: "Runs due diligence on correspondent banking relationships by pulling entity data from Salesforce, running screening checks, and logging in ServiceNow."
tags:
- compliance
- correspondent-banking
- salesforce
- servicenow
- due-diligence
capability:
exposes:
- type: mcp
namespace: cb-diligence
port: 8080
tools:
- name: run-due-diligence
description: "Given a correspondent bank account ID, pull entity data, run screening, and log results."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID for the correspondent bank."
steps:
- name: get-entity
type: call
call: "salesforce.get-account"
with:
account_id: "{{account_id}}"
- name: screen-entity
type: call
call: "sanctions-api.screen"
with:
name: "{{get-entity.Name}}"
country: "{{get-entity.BillingCountry}}"
- name: log-diligence
type: call
call: "servicenow.create-case"
with:
short_description: "CB due diligence: {{get-entity.Name}}"
description: "Screening result: {{screen-entity.status}}. Risk score: {{screen-entity.risk_score}}. Country: {{get-entity.BillingCountry}}"
category: "correspondent_banking"
consumes:
- type: http
namespace: salesforce
baseUri: "https://hsbc.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: sanctions-api
baseUri: "https://sanctions-api.hsbc.com/v1"
authentication:
type: bearer
token: "$secrets.sanctions_token"
resources:
- name: screening
path: "/screen"
operations:
- name: screen
method: POST
- type: http
namespace: servicenow
baseUri: "https://hsbc.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
Detects budget variances by comparing SAP actuals against planned budgets, creating Jira action items, and alerting finance managers via Teams.
naftiko: "0.5"
info:
label: "Cost Center Budget Variance Alert"
description: "Detects budget variances by comparing SAP actuals against planned budgets, creating Jira action items, and alerting finance managers via Teams."
tags:
- finance
- budgeting
- sap
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: budget-ops
port: 8080
tools:
- name: check-budget-variance
description: "Given a cost center and fiscal period, compare SAP actuals to budget and alert if variance exceeds threshold."
inputParameters:
- name: cost_center
in: body
type: string
description: "The SAP cost center code."
- name: fiscal_period
in: body
type: string
description: "The fiscal period, e.g. '2026-03'."
steps:
- name: get-actuals
type: call
call: "sap-erp.get-cost-center-actuals"
with:
cost_center: "{{cost_center}}"
period: "{{fiscal_period}}"
- name: create-action
type: call
call: "jira.create-issue"
with:
project: "FIN"
summary: "Budget variance: {{cost_center}} ({{fiscal_period}})"
description: "Actual: {{get-actuals.actual_amount}}. Budget: {{get-actuals.budget_amount}}. Variance: {{get-actuals.variance_pct}}%"
issuetype: "Task"
priority: "High"
- name: notify-finance
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.finance_channel_id"
message: "Budget variance alert: {{cost_center}} ({{fiscal_period}}). Variance: {{get-actuals.variance_pct}}%. Jira: {{create-action.key}}"
consumes:
- type: http
namespace: sap-erp
baseUri: "https://hsbc-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_BUDGET"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: cost-centers
path: "/A_CostCenterBudget"
operations:
- name: get-cost-center-actuals
method: GET
- type: http
namespace: jira
baseUri: "https://hsbc.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Runs a credit risk assessment by pulling exposure data from Snowflake, scoring with the risk model API, and updating the Salesforce account with the risk rating.
naftiko: "0.5"
info:
label: "Credit Risk Assessment Pipeline"
description: "Runs a credit risk assessment by pulling exposure data from Snowflake, scoring with the risk model API, and updating the Salesforce account with the risk rating."
tags:
- risk
- credit
- snowflake
- salesforce
- banking
capability:
exposes:
- type: mcp
namespace: risk-ops
port: 8080
tools:
- name: assess-credit-risk
description: "Given a customer account ID, pull credit exposure from Snowflake, run risk scoring, and update the Salesforce account."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID."
steps:
- name: get-exposure
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT total_exposure, collateral_value, default_probability FROM risk.credit_exposure WHERE account_id = '{{account_id}}'"
- name: score-risk
type: call
call: "risk-model.score"
with:
exposure: "{{get-exposure.total_exposure}}"
collateral: "{{get-exposure.collateral_value}}"
pd: "{{get-exposure.default_probability}}"
- name: update-account
type: call
call: "salesforce.update-account"
with:
account_id: "{{account_id}}"
Risk_Rating__c: "{{score-risk.rating}}"
Risk_Score__c: "{{score-risk.score}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://hsbc.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: risk-model
baseUri: "https://risk-api.hsbc.com/v1"
authentication:
type: bearer
token: "$secrets.risk_model_token"
resources:
- name: scoring
path: "/score"
operations:
- name: score
method: POST
- type: http
namespace: salesforce
baseUri: "https://hsbc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: update-account
method: PATCH
Validates cross-border payments by screening beneficiaries, checking country restrictions, and logging compliance results in ServiceNow.
naftiko: "0.5"
info:
label: "Cross-Border Payment Compliance Check"
description: "Validates cross-border payments by screening beneficiaries, checking country restrictions, and logging compliance results in ServiceNow."
tags:
- payments
- compliance
- cross-border
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: payment-compliance
port: 8080
tools:
- name: check-cross-border-payment
description: "Given payment details, screen the beneficiary, validate against country restrictions, and log compliance results."
inputParameters:
- name: beneficiary_name
in: body
type: string
description: "The payment beneficiary name."
- name: beneficiary_country
in: body
type: string
description: "The beneficiary country code."
- name: payment_amount
in: body
type: number
description: "The payment amount."
- name: currency
in: body
type: string
description: "The payment currency code."
steps:
- name: screen-beneficiary
type: call
call: "sanctions-api.screen"
with:
name: "{{beneficiary_name}}"
country: "{{beneficiary_country}}"
- name: check-country
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT restriction_type, max_amount FROM compliance.country_restrictions WHERE country_code = '{{beneficiary_country}}' AND currency = '{{currency}}'"
- name: log-result
type: call
call: "servicenow.create-case"
with:
short_description: "Cross-border payment check: {{beneficiary_name}} ({{beneficiary_country}})"
description: "Amount: {{payment_amount}} {{currency}}. Screening: {{screen-beneficiary.status}}. Country restrictions: {{check-country.restriction_type}}"
category: "payment_compliance"
consumes:
- type: http
namespace: sanctions-api
baseUri: "https://sanctions-api.hsbc.com/v1"
authentication:
type: bearer
token: "$secrets.sanctions_token"
resources:
- name: screening
path: "/screen"
operations:
- name: screen
method: POST
- type: http
namespace: snowflake
baseUri: "https://hsbc.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://hsbc.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
Processes customer account closures by updating Salesforce, initiating SAP final settlement, and sending confirmation email via Microsoft Graph.
naftiko: "0.5"
info:
label: "Customer Account Closure Workflow"
description: "Processes customer account closures by updating Salesforce, initiating SAP final settlement, and sending confirmation email via Microsoft Graph."
tags:
- banking
- account-management
- salesforce
- sap
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: account-ops
port: 8080
tools:
- name: close-customer-account
description: "Given a Salesforce account ID and closure reason, update CRM, trigger SAP final settlement, and send confirmation."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID."
- name: closure_reason
in: body
type: string
description: "Reason for account closure."
steps:
- name: get-account
type: call
call: "salesforce.get-account"
with:
account_id: "{{account_id}}"
- name: update-salesforce
type: call
call: "salesforce.update-account"
with:
account_id: "{{account_id}}"
Status__c: "Closed"
Closure_Reason__c: "{{closure_reason}}"
- name: send-confirmation
type: call
call: "msgraph.send-mail"
with:
recipient: "{{get-account.Contact_Email__c}}"
subject: "HSBC: Account Closure Confirmation"
body: "Dear {{get-account.Name}}, your account has been closed per your request. Reason: {{closure_reason}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://hsbc.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
- name: update-account
method: PATCH
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/$secrets.service_email/sendMail"
operations:
- name: send-mail
method: POST
Handles customer complaints by creating a Salesforce case, logging a ServiceNow incident, and sending an acknowledgment email via Microsoft Graph.
naftiko: "0.5"
info:
label: "Customer Complaint Resolution Workflow"
description: "Handles customer complaints by creating a Salesforce case, logging a ServiceNow incident, and sending an acknowledgment email via Microsoft Graph."
tags:
- customer-service
- salesforce
- servicenow
- microsoft-teams
- banking
capability:
exposes:
- type: mcp
namespace: complaints-ops
port: 8080
tools:
- name: process-complaint
description: "Given customer details and complaint description, create a Salesforce case, log a ServiceNow incident, and send an acknowledgment email."
inputParameters:
- name: customer_email
in: body
type: string
description: "The customer email address."
- name: complaint_subject
in: body
type: string
description: "Brief subject of the complaint."
- name: complaint_detail
in: body
type: string
description: "Full complaint description."
steps:
- name: create-case
type: call
call: "salesforce.create-case"
with:
Subject: "{{complaint_subject}}"
Description: "{{complaint_detail}}"
SuppliedEmail: "{{customer_email}}"
Origin: "Digital"
Priority: "High"
- name: log-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Customer complaint: {{complaint_subject}}"
description: "Case: {{create-case.id}}. {{complaint_detail}}"
category: "customer_complaint"
- name: send-ack
type: call
call: "msgraph.send-mail"
with:
recipient: "{{customer_email}}"
subject: "HSBC: Your complaint has been received - {{create-case.CaseNumber}}"
body: "Dear Customer, your complaint regarding '{{complaint_subject}}' has been logged as case {{create-case.CaseNumber}}. We will respond within 48 hours."
consumes:
- type: http
namespace: salesforce
baseUri: "https://hsbc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
- type: http
namespace: servicenow
baseUri: "https://hsbc.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: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/users/$secrets.service_email/sendMail"
operations:
- name: send-mail
method: POST
Processes GDPR subject access requests by searching Snowflake for customer data, generating a report, and creating a ServiceNow tracking case.
naftiko: "0.5"
info:
label: "Data Privacy Subject Access Request"
description: "Processes GDPR subject access requests by searching Snowflake for customer data, generating a report, and creating a ServiceNow tracking case."
tags:
- compliance
- privacy
- gdpr
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: privacy-ops
port: 8080
tools:
- name: process-sar
description: "Given a customer email, search all data stores for personal data, generate a report, and track in ServiceNow."
inputParameters:
- name: customer_email
in: body
type: string
description: "The customer email address for the SAR."
steps:
- name: search-data
type: call
call: "snowflake.execute-statement"
with:
statement: "CALL privacy.subject_access_search('{{customer_email}}')"
- name: create-case
type: call
call: "servicenow.create-case"
with:
short_description: "SAR: {{customer_email}}"
description: "Records found: {{search-data.record_count}}. Data categories: {{search-data.categories}}"
category: "data_privacy"
- name: notify-dpo
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.privacy_channel_id"
message: "SAR processed for {{customer_email}}. {{search-data.record_count}} records found. Case: {{create-case.number}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://hsbc.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://hsbc.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: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Handles database performance alerts from Datadog by creating a PagerDuty incident, logging a Jira ticket, and posting diagnostics to Confluence.
naftiko: "0.5"
info:
label: "Database Performance Degradation Handler"
description: "Handles database performance alerts from Datadog by creating a PagerDuty incident, logging a Jira ticket, and posting diagnostics to Confluence."
tags:
- database
- monitoring
- datadog
- pagerduty
- jira
capability:
exposes:
- type: mcp
namespace: db-ops
port: 8080
tools:
- name: handle-db-degradation
description: "Given a Datadog alert for database performance, create a PagerDuty incident and Jira ticket for the DBA team."
inputParameters:
- name: alert_id
in: body
type: string
description: "The Datadog alert ID."
- name: database_name
in: body
type: string
description: "The affected database name."
steps:
- name: get-alert
type: call
call: "datadog.get-monitor"
with:
monitor_id: "{{alert_id}}"
- name: create-incident
type: call
call: "pagerduty.create-incident"
with:
title: "DB performance degradation: {{database_name}}"
service_id: "$secrets.dba_service_id"
urgency: "high"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "DBA"
summary: "Performance degradation: {{database_name}}"
description: "Datadog alert: {{alert_id}}. {{get-alert.message}}. PagerDuty: {{create-incident.id}}"
issuetype: "Bug"
priority: "High"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: jira
baseUri: "https://hsbc.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
When Datadog detects a latency spike or error rate anomaly on an HSBC banking API, creates a ServiceNow incident and notifies the platform engineering team.
naftiko: "0.5"
info:
label: "Datadog Banking API Observability Alert"
description: "When Datadog detects a latency spike or error rate anomaly on an HSBC banking API, creates a ServiceNow incident and notifies the platform engineering team."
tags:
- observability
- monitoring
- datadog
- servicenow
- microsoft-teams
- banking
capability:
exposes:
- type: mcp
namespace: api-ops
port: 8080
tools:
- name: handle-api-anomaly
description: "Given a Datadog monitor ID that fired on an HSBC banking API, retrieve alert details, open a ServiceNow incident, and notify the platform engineering channel in Microsoft Teams."
inputParameters:
- name: monitor_id
in: body
type: string
description: "The Datadog monitor ID that triggered the anomaly alert."
steps:
- name: get-monitor
type: call
call: "datadog.get-monitor"
with:
monitor_id: "{{monitor_id}}"
- name: create-incident
type: call
call: "servicenow-api.create-incident"
with:
short_description: "API anomaly detected: {{get-monitor.name}}"
description: "Monitor: {{get-monitor.name}}\nStatus: {{get-monitor.overall_state}}\nAPI: {{get-monitor.tags}}"
category: "banking_api"
- name: notify-platform
type: call
call: "msteams-platform.post-channel-message"
with:
channel_id: "$secrets.platform_channel_id"
message: "API anomaly: {{get-monitor.name}} | SNOW: {{create-incident.number}} | State: {{get-monitor.overall_state}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: servicenow-api
baseUri: "https://hsbc.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-platform
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves the current health status and error rate for a specified HSBC banking service from Datadog APM.
naftiko: "0.5"
info:
label: "Datadog Service Health Lookup"
description: "Retrieves the current health status and error rate for a specified HSBC banking service from Datadog APM."
tags:
- monitoring
- datadog
- operations
- lookup
capability:
exposes:
- type: mcp
namespace: observability-lookup
port: 8080
tools:
- name: get-service-health
description: "Given a Datadog service name, return the current health status, error rate, and average latency."
inputParameters:
- name: service_name
in: body
type: string
description: "The Datadog APM service name."
call: datadog.get-service-summary
with:
service: "{{service_name}}"
outputParameters:
- name: status
type: string
mapping: "$.data.attributes.status"
- name: error_rate
type: number
mapping: "$.data.attributes.error_rate"
- name: avg_latency_ms
type: number
mapping: "$.data.attributes.avg_latency"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v2"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: services
path: "/services/{{service}}"
inputParameters:
- name: service
in: path
operations:
- name: get-service-summary
method: GET
Orchestrates feature flag rollouts for HSBC digital banking by updating the feature management API, monitoring via Datadog, and notifying the product team.
naftiko: "0.5"
info:
label: "Digital Banking Feature Flag Rollout"
description: "Orchestrates feature flag rollouts for HSBC digital banking by updating the feature management API, monitoring via Datadog, and notifying the product team."
tags:
- digital-banking
- devops
- feature-flags
- datadog
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: feature-ops
port: 8080
tools:
- name: rollout-feature-flag
description: "Given a feature flag name and rollout percentage, update the flag, monitor error rates, and notify the product team."
inputParameters:
- name: flag_name
in: body
type: string
description: "The feature flag name."
- name: rollout_pct
in: body
type: number
description: "Rollout percentage (0-100)."
steps:
- name: update-flag
type: call
call: "feature-api.update-flag"
with:
flag: "{{flag_name}}"
percentage: "{{rollout_pct}}"
- name: check-errors
type: call
call: "datadog.get-service-summary"
with:
service: "digital-banking-app"
- name: notify-product
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.product_channel_id"
message: "Feature flag {{flag_name}} rolled out to {{rollout_pct}}%. Error rate: {{check-errors.error_rate}}%"
consumes:
- type: http
namespace: feature-api
baseUri: "https://feature-flags.hsbc.com/api/v1"
authentication:
type: bearer
token: "$secrets.feature_flag_token"
resources:
- name: flags
path: "/flags/{{flag}}"
inputParameters:
- name: flag
in: path
operations:
- name: update-flag
method: PATCH
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v2"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: services
path: "/services/{{service}}"
inputParameters:
- name: service
in: path
operations:
- name: get-service-summary
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Orchestrates DR failover testing by triggering Terraform DR workspace, verifying health via Datadog, and reporting results in Confluence.
naftiko: "0.5"
info:
label: "Disaster Recovery Failover Test"
description: "Orchestrates DR failover testing by triggering Terraform DR workspace, verifying health via Datadog, and reporting results in Confluence."
tags:
- disaster-recovery
- infrastructure
- terraform
- datadog
- confluence
capability:
exposes:
- type: mcp
namespace: dr-ops
port: 8080
tools:
- name: run-dr-failover-test
description: "Trigger a DR failover test via Terraform, verify health checks in Datadog, and publish results to Confluence."
inputParameters:
- name: dr_workspace
in: body
type: string
description: "The Terraform workspace for DR failover."
- name: service_name
in: body
type: string
description: "The service to test failover for."
steps:
- name: trigger-failover
type: call
call: "terraform.create-run"
with:
workspace_name: "{{dr_workspace}}"
message: "DR failover test for {{service_name}}"
- name: check-health
type: call
call: "datadog.get-service-summary"
with:
service: "{{service_name}}"
- name: publish-results
type: call
call: "confluence.create-page"
with:
space_key: "DR"
title: "DR Test: {{service_name}} - {{dr_workspace}}"
body: "Failover status: {{trigger-failover.status}}. Health check: {{check-health.status}}. Error rate: {{check-health.error_rate}}"
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: datadog
baseUri: "https://api.datadoghq.com/api/v2"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: services
path: "/services/{{service}}"
inputParameters:
- name: service
in: path
operations:
- name: get-service-summary
method: GET
- type: http
namespace: confluence
baseUri: "https://hsbc.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Retrieves the status of a DocuSign envelope for HSBC contract or agreement signing workflows.
naftiko: "0.5"
info:
label: "DocuSign Envelope Status Lookup"
description: "Retrieves the status of a DocuSign envelope for HSBC contract or agreement signing workflows."
tags:
- legal
- docusign
- contracts
- lookup
capability:
exposes:
- type: mcp
namespace: legal-lookup
port: 8080
tools:
- name: get-envelope-status
description: "Given a DocuSign envelope ID, return the envelope status, sender name, and completion date."
inputParameters:
- name: envelope_id
in: body
type: string
description: "The DocuSign envelope ID."
call: docusign.get-envelope
with:
envelope_id: "{{envelope_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: sender
type: string
mapping: "$.sender.userName"
- name: completed_date
type: string
mapping: "$.completedDateTime"
consumes:
- type: http
namespace: docusign
baseUri: "https://na4.docusign.net/restapi/v2.1"
authentication:
type: bearer
token: "$secrets.docusign_token"
resources:
- name: envelopes
path: "/accounts/$secrets.docusign_account_id/envelopes/{{envelope_id}}"
inputParameters:
- name: envelope_id
in: path
operations:
- name: get-envelope
method: GET
Orchestrates employee offboarding by deactivating Okta access, closing ServiceNow tickets, and notifying HR via Teams when an HSBC employee departs.
naftiko: "0.5"
info:
label: "Employee Offboarding Access Revocation"
description: "Orchestrates employee offboarding by deactivating Okta access, closing ServiceNow tickets, and notifying HR via Teams when an HSBC employee departs."
tags:
- hr
- offboarding
- okta
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: process-offboarding
description: "Given a Workday worker ID, deactivate the employee in Okta, create an offboarding ServiceNow ticket, and notify HR via Teams."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID of the departing employee."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
- name: deactivate-okta
type: call
call: "okta.deactivate-user"
with:
user_login: "{{get-employee.work_email}}"
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Offboarding: {{get-employee.full_name}}"
category: "hr_offboarding"
assigned_to: "IT_Offboarding"
- name: notify-hr
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.hr_channel_id"
message: "Offboarding initiated for {{get-employee.full_name}}. Okta deactivated. ServiceNow ticket: {{create-ticket.number}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/hsbc/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://hsbc.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_token"
placement: header
resources:
- name: users
path: "/users/{{user_login}}/lifecycle/deactivate"
inputParameters:
- name: user_login
in: path
operations:
- name: deactivate-user
method: POST
- type: http
namespace: servicenow
baseUri: "https://hsbc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When a new hire record is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft 365 account, and sends a Teams welcome message.
naftiko: "0.5"
info:
label: "Employee Onboarding Orchestrator"
description: "When a new hire record is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft 365 account, and sends a Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday employee ID and start date, orchestrate the full new-hire onboarding sequence across ServiceNow, Microsoft Graph, and Microsoft Teams for HSBC."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID for the new hire."
- name: start_date
in: body
type: string
description: "The employee start date in YYYY-MM-DD format."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "New hire onboarding: {{get-employee.full_name}}"
category: "hr_onboarding"
assigned_to: "IT_Onboarding"
- name: provision-account
type: call
call: "msgraph.create-user"
with:
displayName: "{{get-employee.full_name}}"
mail: "{{get-employee.work_email}}"
department: "{{get-employee.department}}"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient: "{{get-employee.work_email}}"
message: "Welcome to HSBC, {{get-employee.first_name}}! Your IT ticket is {{create-ticket.number}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/hsbc/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://hsbc.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: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient}}/sendMail"
inputParameters:
- name: recipient
in: path
operations:
- name: send-message
method: POST
Checks mandatory training completion in Workday Learning, creates ServiceNow follow-up tasks for non-compliant employees, and reports to HR via Teams.
naftiko: "0.5"
info:
label: "Employee Training Compliance Tracker"
description: "Checks mandatory training completion in Workday Learning, creates ServiceNow follow-up tasks for non-compliant employees, and reports to HR via Teams."
tags:
- hr
- training
- compliance
- workday
- servicenow
capability:
exposes:
- type: mcp
namespace: training-ops
port: 8080
tools:
- name: check-training-compliance
description: "Given a training program ID, check completion status in Workday, create tasks for overdue employees, and report to HR."
inputParameters:
- name: program_id
in: body
type: string
description: "The Workday training program ID."
steps:
- name: get-completion
type: call
call: "workday.get-training-status"
with:
program_id: "{{program_id}}"
- name: create-followup
type: call
call: "servicenow.create-request"
with:
short_description: "Training compliance follow-up: {{program_id}}"
description: "Overdue: {{get-completion.overdue_count}} employees. Program: {{get-completion.program_name}}"
category: "hr_training"
assigned_to: "HR_Learning"
- name: notify-hr
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.hr_channel_id"
message: "Training compliance: {{get-completion.program_name}}. Completed: {{get-completion.completed_count}}. Overdue: {{get-completion.overdue_count}}. Task: {{create-followup.number}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: training
path: "/hsbc/learning/programs/{{program_id}}/status"
inputParameters:
- name: program_id
in: path
operations:
- name: get-training-status
method: GET
- type: http
namespace: servicenow
baseUri: "https://hsbc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Monitors foreign exchange rates from Bloomberg, checks against configured thresholds in Snowflake, and sends alerts to the treasury team via Teams.
naftiko: "0.5"
info:
label: "FX Rate Alert and Notification"
description: "Monitors foreign exchange rates from Bloomberg, checks against configured thresholds in Snowflake, and sends alerts to the treasury team via Teams."
tags:
- trading
- treasury
- bloomberg
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: fx-ops
port: 8080
tools:
- name: check-fx-rate-alert
description: "Given a currency pair, fetch the current FX rate from Bloomberg, compare against Snowflake thresholds, and alert treasury via Teams if breached."
inputParameters:
- name: currency_pair
in: body
type: string
description: "The currency pair, e.g. 'EUR/USD'."
steps:
- name: get-rate
type: call
call: "bloomberg.get-fx-rate"
with:
pair: "{{currency_pair}}"
- name: get-threshold
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT upper_limit, lower_limit FROM treasury.fx_thresholds WHERE pair = '{{currency_pair}}'"
- name: notify-treasury
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.treasury_channel_id"
message: "FX Alert: {{currency_pair}} at {{get-rate.mid_rate}}. Thresholds: {{get-threshold.lower_limit}} - {{get-threshold.upper_limit}}"
consumes:
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: fx-rates
path: "/fx/{{pair}}"
inputParameters:
- name: pair
in: path
operations:
- name: get-fx-rate
method: GET
- type: http
namespace: snowflake
baseUri: "https://hsbc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
On a GitHub Actions workflow failure on a protected branch, creates a Jira bug and alerts the engineering Teams channel.
naftiko: "0.5"
info:
label: "GitHub CI/CD Pipeline Failure Handler"
description: "On a GitHub Actions workflow failure on a protected branch, creates a Jira bug and alerts the engineering Teams channel."
tags:
- devops
- cicd
- github
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: devops
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a GitHub Actions pipeline failure with repo, workflow, branch, and run URL, open a Jira engineering bug and post an alert to the HSBC engineering Teams channel."
inputParameters:
- name: repo_name
in: body
type: string
description: "The GitHub repository full name, e.g. hsbc/payments-api."
- name: workflow_name
in: body
type: string
description: "The name of the failed GitHub Actions workflow."
- name: branch
in: body
type: string
description: "The branch on which the pipeline failed."
- name: run_url
in: body
type: string
description: "The URL to the failed GitHub Actions run."
- name: commit_sha
in: body
type: string
description: "The commit SHA that triggered the pipeline."
steps:
- name: create-jira-bug
type: call
call: "jira.create-issue"
with:
project_key: "ENG"
issuetype: "Bug"
summary: "[CI Failure] {{repo_name}} / {{branch}} — {{workflow_name}}"
description: "Repo: {{repo_name}}\nBranch: {{branch}}\nCommit: {{commit_sha}}\nRun: {{run_url}}"
- name: notify-engineering
type: call
call: "msteams-eng.post-channel-message"
with:
channel_id: "$secrets.engineering_channel_id"
message: "Pipeline failure in {{repo_name}} on {{branch}} | Jira: {{create-jira-bug.key}} | {{run_url}}"
consumes:
- type: http
namespace: jira
baseUri: "https://hsbc.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams-eng
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Tracks GitHub releases by creating a ServiceNow change request, updating Jira release tickets, and notifying the engineering team via Teams.
naftiko: "0.5"
info:
label: "GitHub Release Deployment Tracker"
description: "Tracks GitHub releases by creating a ServiceNow change request, updating Jira release tickets, and notifying the engineering team via Teams."
tags:
- devops
- deployment
- github
- servicenow
- jira
capability:
exposes:
- type: mcp
namespace: release-ops
port: 8080
tools:
- name: track-release-deployment
description: "Given a GitHub repository and release tag, create a ServiceNow change request and update the Jira release ticket."
inputParameters:
- name: repo_name
in: body
type: string
description: "The GitHub repository name."
- name: release_tag
in: body
type: string
description: "The release tag, e.g. 'v2.1.0'."
steps:
- name: get-release
type: call
call: "github.get-release"
with:
repo: "{{repo_name}}"
tag: "{{release_tag}}"
- name: create-change
type: call
call: "servicenow.create-change"
with:
short_description: "Deployment: {{repo_name}} {{release_tag}}"
description: "Release notes: {{get-release.body}}"
category: "software_deployment"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.engineering_channel_id"
message: "Release {{release_tag}} of {{repo_name}} deployed. Change request: {{create-change.number}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: releases
path: "/repos/{{repo}}/releases/tags/{{tag}}"
inputParameters:
- name: repo
in: path
- name: tag
in: path
operations:
- name: get-release
method: GET
- type: http
namespace: servicenow
baseUri: "https://hsbc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves metadata for an HSBC GitHub repository including default branch, open issues count, and last push date.
naftiko: "0.5"
info:
label: "GitHub Repository Lookup"
description: "Retrieves metadata for an HSBC GitHub repository including default branch, open issues count, and last push date."
tags:
- devops
- github
- lookup
capability:
exposes:
- type: mcp
namespace: devops-lookup
port: 8080
tools:
- name: get-repository
description: "Given a GitHub repository name, return the default branch, open issues count, and last push date."
inputParameters:
- name: repo_name
in: body
type: string
description: "The GitHub repository name (org/repo format)."
call: github.get-repo
with:
repo: "{{repo_name}}"
outputParameters:
- name: default_branch
type: string
mapping: "$.default_branch"
- name: open_issues
type: number
mapping: "$.open_issues_count"
- name: last_push
type: string
mapping: "$.pushed_at"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: repos
path: "/repos/{{repo}}"
inputParameters:
- name: repo
in: path
operations:
- name: get-repo
method: GET
Lists critical Dependabot alerts across HSBC GitHub repositories and creates Jira security issues for unresolved critical dependencies.
naftiko: "0.5"
info:
label: "GitHub Security Vulnerability Triage"
description: "Lists critical Dependabot alerts across HSBC GitHub repositories and creates Jira security issues for unresolved critical dependencies."
tags:
- devops
- security
- github
- jira
capability:
exposes:
- type: mcp
namespace: vuln-triage
port: 8080
tools:
- name: triage-dependabot-alerts
description: "Given the HSBC GitHub organization name, list all open Dependabot critical severity alerts and create a Jira security issue summarizing the findings for the information security team."
inputParameters:
- name: org_name
in: body
type: string
description: "The GitHub organization name, e.g. hsbc."
steps:
- name: get-alerts
type: call
call: "github.list-org-dependabot-alerts"
with:
org: "{{org_name}}"
severity: "critical"
state: "open"
- name: create-jira-issue
type: call
call: "jira-sec.create-issue"
with:
project_key: "SEC"
issuetype: "Bug"
summary: "Dependabot critical alerts: {{get-alerts.total_count}} open in {{org_name}}"
description: "Organization: {{org_name}}\nCritical alerts: {{get-alerts.total_count}}\nTop package: {{get-alerts.top_package}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: dependabot-alerts
path: "/orgs/{{org}}/dependabot/alerts"
inputParameters:
- name: org
in: path
- name: severity
in: query
- name: state
in: query
operations:
- name: list-org-dependabot-alerts
method: GET
- type: http
namespace: jira-sec
baseUri: "https://hsbc.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Generates a daily P&L report for HSBC global markets by querying Snowflake trading data, creating a Power BI snapshot, and distributing via Teams.
naftiko: "0.5"
info:
label: "Global Markets Daily P&L Report"
description: "Generates a daily P&L report for HSBC global markets by querying Snowflake trading data, creating a Power BI snapshot, and distributing via Teams."
tags:
- trading
- finance
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: markets-reporting
port: 8080
tools:
- name: generate-daily-pnl
description: "Given a trading date, aggregate P&L from Snowflake, refresh Power BI, and send the report to the trading desk heads."
inputParameters:
- name: trading_date
in: body
type: string
description: "The trading date in YYYY-MM-DD format."
steps:
- name: aggregate-pnl
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT desk, SUM(realized_pnl) as total_pnl, SUM(unrealized_pnl) as mark_to_market FROM trading.daily_pnl WHERE trade_date = '{{trading_date}}' GROUP BY desk"
- name: refresh-dashboard
type: call
call: "powerbi.trigger-refresh"
with:
group_id: "$secrets.trading_workspace_id"
dataset_id: "$secrets.pnl_dataset_id"
- name: send-report
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.trading_channel_id"
message: "Daily P&L report for {{trading_date}} is ready. Desks reported: {{aggregate-pnl.row_count}}. Dashboard refreshed."
consumes:
- type: http
namespace: snowflake
baseUri: "https://hsbc.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: refreshes
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Checks Informatica IICS pipeline run status for HSBC financial data pipelines and alerts the data engineering team via Teams if any pipelines have failed.
naftiko: "0.5"
info:
label: "Informatica Data Pipeline Monitoring"
description: "Checks Informatica IICS pipeline run status for HSBC financial data pipelines and alerts the data engineering team via Teams if any pipelines have failed."
tags:
- data
- monitoring
- informatica
- microsoft-teams
- banking
capability:
exposes:
- type: mcp
namespace: data-pipeline-ops
port: 8080
tools:
- name: monitor-informatica-pipelines
description: "List recent Informatica IICS pipeline runs for HSBC financial data workflows, identify failures in the last hour, and send an alert to the data engineering Teams channel."
inputParameters:
- name: org_id
in: body
type: string
description: "The Informatica IICS organization ID for the HSBC environment."
steps:
- name: get-failed-runs
type: call
call: "informatica.list-activity-log"
with:
org_id: "{{org_id}}"
status: "FAILED"
- name: send-alert
type: call
call: "msteams-informatica.post-channel-message"
with:
channel_id: "$secrets.data_eng_channel_id"
message: "HSBC Informatica alert: {{get-failed-runs.count}} pipelines failed. First failure: {{get-failed-runs.first_pipeline_name}}"
consumes:
- type: http
namespace: informatica
baseUri: "https://usw3.dm-us.informaticacloud.com/saas/public/core/v3"
authentication:
type: bearer
token: "$secrets.informatica_token"
resources:
- name: activity-log
path: "/activityLog"
inputParameters:
- name: status
in: query
operations:
- name: list-activity-log
method: GET
- type: http
namespace: msteams-informatica
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Reconciles interbank payments by comparing SAP payment records with Snowflake settlement data and creating ServiceNow exceptions for mismatches.
naftiko: "0.5"
info:
label: "Interbank Payment Reconciliation Workflow"
description: "Reconciles interbank payments by comparing SAP payment records with Snowflake settlement data and creating ServiceNow exceptions for mismatches."
tags:
- payments
- reconciliation
- sap
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: payment-recon
port: 8080
tools:
- name: reconcile-payments
description: "Given a settlement date, compare SAP payments with Snowflake settlement records and log exceptions."
inputParameters:
- name: settlement_date
in: body
type: string
description: "The settlement date in YYYY-MM-DD format."
steps:
- name: get-sap-payments
type: call
call: "sap-erp.get-payments"
with:
date: "{{settlement_date}}"
- name: get-settlement-data
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM payments.settlements WHERE settlement_date = '{{settlement_date}}'"
- name: log-exceptions
type: call
call: "servicenow.create-incident"
with:
short_description: "Payment reconciliation exceptions: {{settlement_date}}"
description: "SAP records: {{get-sap-payments.count}}. Settlement records: {{get-settlement-data.row_count}}. Review required."
category: "payment_reconciliation"
assigned_to: "Payment_Operations"
consumes:
- type: http
namespace: sap-erp
baseUri: "https://hsbc-s4.sap.com/sap/opu/odata/sap/API_PAYMENT_RUN"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: payments
path: "/A_PaymentRun"
operations:
- name: get-payments
method: GET
- type: http
namespace: snowflake
baseUri: "https://hsbc.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://hsbc.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 and tracks internal audit findings by logging to ServiceNow, creating Jira remediation tasks, and publishing a summary to Confluence.
naftiko: "0.5"
info:
label: "Internal Audit Finding Tracker"
description: "Creates and tracks internal audit findings by logging to ServiceNow, creating Jira remediation tasks, and publishing a summary to Confluence."
tags:
- audit
- compliance
- servicenow
- jira
- confluence
capability:
exposes:
- type: mcp
namespace: audit-ops
port: 8080
tools:
- name: log-audit-finding
description: "Given audit finding details, create a ServiceNow audit record, a Jira remediation task, and publish to Confluence."
inputParameters:
- name: finding_title
in: body
type: string
description: "Title of the audit finding."
- name: finding_detail
in: body
type: string
description: "Detailed description of the finding."
- name: severity
in: body
type: string
description: "Severity level (critical, high, medium, low)."
steps:
- name: create-audit-record
type: call
call: "servicenow.create-audit-finding"
with:
short_description: "{{finding_title}}"
description: "{{finding_detail}}"
severity: "{{severity}}"
- name: create-remediation
type: call
call: "jira.create-issue"
with:
project: "AUDIT"
summary: "Remediation: {{finding_title}}"
description: "ServiceNow: {{create-audit-record.number}}. {{finding_detail}}"
issuetype: "Task"
priority: "{{severity}}"
- name: publish-summary
type: call
call: "confluence.create-page"
with:
space_key: "AUDIT"
title: "Audit Finding: {{finding_title}}"
body: "Severity: {{severity}}. ServiceNow: {{create-audit-record.number}}. Jira: {{create-remediation.key}}. Details: {{finding_detail}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://hsbc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: audit-findings
path: "/table/sn_audit_finding"
operations:
- name: create-audit-finding
method: POST
- type: http
namespace: jira
baseUri: "https://hsbc.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: confluence
baseUri: "https://hsbc.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Generates a weekly deal pipeline digest by querying Salesforce opportunities, aggregating in Snowflake, and distributing via Teams to senior bankers.
naftiko: "0.5"
info:
label: "Investment Banking Deal Pipeline Digest"
description: "Generates a weekly deal pipeline digest by querying Salesforce opportunities, aggregating in Snowflake, and distributing via Teams to senior bankers."
tags:
- investment-banking
- deals
- salesforce
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: ib-pipeline
port: 8080
tools:
- name: generate-deal-digest
description: "Pull active deal pipeline from Salesforce, aggregate metrics in Snowflake, and send digest to IB leadership."
inputParameters:
- name: division
in: body
type: string
description: "Investment banking division (M&A, DCM, ECM)."
steps:
- name: get-deals
type: call
call: "salesforce.query-opportunities"
with:
query: "SELECT Id, Name, Amount, StageName FROM Opportunity WHERE Division__c = '{{division}}' AND IsClosed = false"
- name: aggregate-metrics
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT COUNT(*) as deal_count, SUM(amount) as total_pipeline FROM ib.deal_pipeline WHERE division = '{{division}}' AND status = 'active'"
- name: send-digest
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.ib_channel_id"
message: "{{division}} Deal Pipeline: {{aggregate-metrics.deal_count}} active deals, total pipeline: {{aggregate-metrics.total_pipeline}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://hsbc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: query
path: "/query"
operations:
- name: query-opportunities
method: GET
- type: http
namespace: snowflake
baseUri: "https://hsbc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retires an IT asset by updating ServiceNow CMDB, revoking Azure resource access, and notifying the asset management team via Teams.
naftiko: "0.5"
info:
label: "IT Asset Lifecycle Retirement Workflow"
description: "Retires an IT asset by updating ServiceNow CMDB, revoking Azure resource access, and notifying the asset management team via Teams."
tags:
- itsm
- asset-management
- servicenow
- azure
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: asset-ops
port: 8080
tools:
- name: retire-it-asset
description: "Given a ServiceNow CI sys_id, mark the asset as retired in CMDB, deallocate Azure resources, and notify the asset team."
inputParameters:
- name: ci_sys_id
in: body
type: string
description: "The ServiceNow configuration item sys_id."
steps:
- name: get-asset
type: call
call: "servicenow.get-ci"
with:
sys_id: "{{ci_sys_id}}"
- name: update-cmdb
type: call
call: "servicenow.update-ci"
with:
sys_id: "{{ci_sys_id}}"
install_status: "retired"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.asset_mgmt_channel_id"
message: "IT asset retired: {{get-asset.name}} ({{get-asset.asset_tag}}). CMDB updated."
consumes:
- type: http
namespace: servicenow
baseUri: "https://hsbc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: cmdb
path: "/table/cmdb_ci/{{sys_id}}"
inputParameters:
- name: sys_id
in: path
operations:
- name: get-ci
method: GET
- name: update-ci
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves a Jira issue by key and returns the summary, status, assignee, and priority for HSBC engineering teams.
naftiko: "0.5"
info:
label: "Jira Issue Lookup"
description: "Retrieves a Jira issue by key and returns the summary, status, assignee, and priority for HSBC engineering teams."
tags:
- devops
- jira
- lookup
capability:
exposes:
- type: mcp
namespace: jira-lookup
port: 8080
tools:
- name: get-jira-issue
description: "Given a Jira issue key, return the summary, status, assignee, and priority."
inputParameters:
- name: issue_key
in: body
type: string
description: "The Jira issue key, e.g. 'BANK-1234'."
call: jira.get-issue
with:
issueIdOrKey: "{{issue_key}}"
outputParameters:
- name: summary
type: string
mapping: "$.fields.summary"
- name: status
type: string
mapping: "$.fields.status.name"
- name: assignee
type: string
mapping: "$.fields.assignee.displayName"
- name: priority
type: string
mapping: "$.fields.priority.name"
consumes:
- type: http
namespace: jira
baseUri: "https://hsbc.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue/{issueIdOrKey}"
inputParameters:
- name: issueIdOrKey
in: path
operations:
- name: get-issue
method: GET
Fetches sprint velocity metrics from Jira for an HSBC technology team and publishes a digest to Confluence and a Teams channel.
naftiko: "0.5"
info:
label: "Jira Sprint Velocity Report to Confluence"
description: "Fetches sprint velocity metrics from Jira for an HSBC technology team and publishes a digest to Confluence and a Teams channel."
tags:
- devops
- reporting
- jira
- confluence
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: agile-reporting
port: 8080
tools:
- name: publish-sprint-velocity-report
description: "Given a Jira board ID and sprint ID, retrieve completed story points, update the HSBC team Confluence velocity page, and post a summary to the Microsoft Teams engineering channel."
inputParameters:
- name: board_id
in: body
type: string
description: "The Jira board ID for the HSBC technology team."
- name: sprint_id
in: body
type: string
description: "The Jira sprint ID to report on."
steps:
- name: get-sprint-report
type: call
call: "jira-agile.get-sprint-report"
with:
board_id: "{{board_id}}"
sprint_id: "{{sprint_id}}"
- name: update-confluence
type: call
call: "confluence.update-page"
with:
page_id: "$secrets.velocity_confluence_page_id"
content: "Sprint {{sprint_id}} Velocity: {{get-sprint-report.completed_points}} points."
- name: notify-team
type: call
call: "msteams-agile.post-channel-message"
with:
channel_id: "$secrets.engineering_channel_id"
message: "Sprint {{sprint_id}} complete. Velocity: {{get-sprint-report.completed_points}} pts."
consumes:
- type: http
namespace: jira-agile
baseUri: "https://hsbc.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: sprint-reports
path: "/board/{{board_id}}/sprint/{{sprint_id}}/report"
inputParameters:
- name: board_id
in: path
- name: sprint_id
in: path
operations:
- name: get-sprint-report
method: GET
- type: http
namespace: confluence
baseUri: "https://hsbc.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: pages
path: "/content/{{page_id}}"
inputParameters:
- name: page_id
in: path
operations:
- name: update-page
method: PUT
- type: http
namespace: msteams-agile
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Orchestrates know-your-customer verification by pulling customer data from Salesforce, running identity checks, and logging results to ServiceNow for HSBC compliance.
naftiko: "0.5"
info:
label: "KYC Customer Verification Workflow"
description: "Orchestrates know-your-customer verification by pulling customer data from Salesforce, running identity checks, and logging results to ServiceNow for HSBC compliance."
tags:
- compliance
- kyc
- salesforce
- servicenow
- banking
capability:
exposes:
- type: mcp
namespace: kyc-ops
port: 8080
tools:
- name: run-kyc-verification
description: "Given a Salesforce customer account ID, pull customer details, run KYC checks, and create a compliance case in ServiceNow."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID for the customer."
steps:
- name: get-customer
type: call
call: "salesforce.get-account"
with:
account_id: "{{account_id}}"
- name: run-check
type: call
call: "kyc-service.verify-identity"
with:
customer_name: "{{get-customer.Name}}"
country: "{{get-customer.BillingCountry}}"
registration_number: "{{get-customer.CompanyRegistration__c}}"
- name: log-result
type: call
call: "servicenow.create-case"
with:
short_description: "KYC verification: {{get-customer.Name}}"
category: "compliance_kyc"
description: "KYC result: {{run-check.status}} - Risk score: {{run-check.risk_score}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://hsbc.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: kyc-service
baseUri: "https://kyc-api.hsbc.com/v1"
authentication:
type: bearer
token: "$secrets.kyc_token"
resources:
- name: verifications
path: "/verify"
operations:
- name: verify-identity
method: POST
- type: http
namespace: servicenow
baseUri: "https://hsbc.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
Fetches LinkedIn Campaign Manager metrics for HSBC employer brand campaigns and publishes a weekly digest to SharePoint.
naftiko: "0.5"
info:
label: "LinkedIn Employer Brand Campaign Performance Digest"
description: "Fetches LinkedIn Campaign Manager metrics for HSBC employer brand campaigns and publishes a weekly digest to SharePoint."
tags:
- marketing
- social
- linkedin
- sharepoint
- reporting
capability:
exposes:
- type: mcp
namespace: talent-brand
port: 8080
tools:
- name: digest-linkedin-campaign
description: "Given a LinkedIn campaign ID and date range, retrieve impressions, clicks, and applications for HSBC employer brand campaigns, then publish a digest to the HSBC Careers SharePoint page."
inputParameters:
- name: campaign_id
in: body
type: string
description: "The LinkedIn Campaign Manager campaign ID."
- name: start_date
in: body
type: string
description: "Report start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "Report end date in YYYY-MM-DD format."
steps:
- name: get-campaign-stats
type: call
call: "linkedin.get-campaign-analytics"
with:
campaign_id: "{{campaign_id}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
- name: publish-digest
type: call
call: "sharepoint.create-page"
with:
site_id: "$secrets.talent_brand_site_id"
title: "LinkedIn Campaign Report {{campaign_id}} {{start_date}} to {{end_date}}"
content: "Impressions: {{get-campaign-stats.impressions}} | Clicks: {{get-campaign-stats.clicks}} | Applications: {{get-campaign-stats.applications}}"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: campaign-analytics
path: "/adAnalyticsV2"
inputParameters:
- name: campaign_id
in: query
- name: start_date
in: query
- name: end_date
in: query
operations:
- name: get-campaign-analytics
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: pages
path: "/sites/{{site_id}}/pages"
inputParameters:
- name: site_id
in: path
operations:
- name: create-page
method: POST
Runs liquidity stress test scenarios from Snowflake, generates a report via Confluence, and alerts treasury leadership via Teams.
naftiko: "0.5"
info:
label: "Liquidity Stress Test Runner"
description: "Runs liquidity stress test scenarios from Snowflake, generates a report via Confluence, and alerts treasury leadership via Teams."
tags:
- treasury
- risk
- liquidity
- snowflake
- confluence
capability:
exposes:
- type: mcp
namespace: liquidity-ops
port: 8080
tools:
- name: run-liquidity-stress-test
description: "Given a stress scenario name, execute the scenario in Snowflake, publish results to Confluence, and notify treasury."
inputParameters:
- name: scenario_name
in: body
type: string
description: "The stress test scenario name."
steps:
- name: run-scenario
type: call
call: "snowflake.execute-statement"
with:
statement: "CALL risk.run_liquidity_stress('{{scenario_name}}')"
- name: publish-results
type: call
call: "confluence.create-page"
with:
space_key: "TREASURY"
title: "Liquidity Stress Test: {{scenario_name}}"
body: "Scenario: {{scenario_name}}. LCR: {{run-scenario.lcr}}%. NSFR: {{run-scenario.nsfr}}%. Survival days: {{run-scenario.survival_days}}"
- name: notify-treasury
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.treasury_channel_id"
message: "Liquidity stress test complete: {{scenario_name}}. LCR: {{run-scenario.lcr}}%. Results published to Confluence."
consumes:
- type: http
namespace: snowflake
baseUri: "https://hsbc.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: confluence
baseUri: "https://hsbc.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Orchestrates loan application intake by creating a Salesforce opportunity, running credit scoring, and notifying the lending team via Teams.
naftiko: "0.5"
info:
label: "Loan Application Processing Orchestrator"
description: "Orchestrates loan application intake by creating a Salesforce opportunity, running credit scoring, and notifying the lending team via Teams."
tags:
- banking
- lending
- salesforce
- microsoft-teams
- credit
capability:
exposes:
- type: mcp
namespace: lending-ops
port: 8080
tools:
- name: process-loan-application
description: "Given applicant details and loan amount, create a Salesforce opportunity, run credit scoring, and notify the lending team."
inputParameters:
- name: applicant_name
in: body
type: string
description: "The applicant full name."
- name: loan_amount
in: body
type: number
description: "Requested loan amount."
- name: loan_type
in: body
type: string
description: "Type of loan (mortgage, personal, business)."
steps:
- name: create-opportunity
type: call
call: "salesforce.create-opportunity"
with:
Name: "Loan Application - {{applicant_name}}"
Amount: "{{loan_amount}}"
StageName: "Application Received"
Type: "{{loan_type}}"
- name: run-credit-check
type: call
call: "credit-service.score"
with:
applicant_name: "{{applicant_name}}"
loan_amount: "{{loan_amount}}"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.lending_channel_id"
message: "New loan application: {{applicant_name}} for {{loan_amount}}. Credit score: {{run-credit-check.score}}. Opportunity: {{create-opportunity.id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://hsbc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
operations:
- name: create-opportunity
method: POST
- type: http
namespace: credit-service
baseUri: "https://credit-api.hsbc.com/v1"
authentication:
type: bearer
token: "$secrets.credit_token"
resources:
- name: scoring
path: "/score"
operations:
- name: score
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Detects Value-at-Risk limit breaches from Snowflake risk data, alerts the risk committee via PagerDuty, and logs a Jira risk event.
naftiko: "0.5"
info:
label: "Market Risk VaR Breach Escalation"
description: "Detects Value-at-Risk limit breaches from Snowflake risk data, alerts the risk committee via PagerDuty, and logs a Jira risk event."
tags:
- risk
- market-risk
- snowflake
- pagerduty
- jira
capability:
exposes:
- type: mcp
namespace: market-risk
port: 8080
tools:
- name: escalate-var-breach
description: "Given a trading desk, check VaR limits in Snowflake and escalate if breached."
inputParameters:
- name: desk_code
in: body
type: string
description: "The trading desk code."
steps:
- name: check-var
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT desk_code, current_var, var_limit, (current_var / var_limit * 100) as utilization_pct FROM risk.var_limits WHERE desk_code = '{{desk_code}}'"
- name: alert-risk
type: call
call: "pagerduty.create-incident"
with:
title: "VaR breach: desk {{desk_code}} at {{check-var.utilization_pct}}% utilization"
service_id: "$secrets.risk_service_id"
urgency: "high"
- name: log-event
type: call
call: "jira.create-issue"
with:
project: "RISK"
summary: "VaR limit breach: {{desk_code}}"
description: "Current VaR: {{check-var.current_var}}. Limit: {{check-var.var_limit}}. Utilization: {{check-var.utilization_pct}}%"
issuetype: "Bug"
priority: "Critical"
consumes:
- type: http
namespace: snowflake
baseUri: "https://hsbc.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: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: jira
baseUri: "https://hsbc.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Orchestrates mortgage document verification by extracting document data via AI, validating against Salesforce application records, and updating the case status.
naftiko: "0.5"
info:
label: "Mortgage Document Verification Workflow"
description: "Orchestrates mortgage document verification by extracting document data via AI, validating against Salesforce application records, and updating the case status."
tags:
- banking
- mortgage
- anthropic
- salesforce
- document-processing
capability:
exposes:
- type: mcp
namespace: mortgage-ops
port: 8080
tools:
- name: verify-mortgage-documents
description: "Given a Salesforce case ID with uploaded mortgage documents, extract key fields via AI, validate against application data, and update the case."
inputParameters:
- name: case_id
in: body
type: string
description: "The Salesforce case ID for the mortgage application."
steps:
- name: get-case
type: call
call: "salesforce.get-case"
with:
case_id: "{{case_id}}"
- name: extract-documents
type: call
call: "anthropic.create-message"
with:
model: "claude-sonnet-4-20250514"
message: "Extract key mortgage fields (income, property value, loan amount) from the following document: {{get-case.Document_Text__c}}"
- name: update-case
type: call
call: "salesforce.update-case"
with:
case_id: "{{case_id}}"
Status: "Documents Verified"
Verification_Notes__c: "AI extraction complete: {{extract-documents.content}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://hsbc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case/{{case_id}}"
inputParameters:
- name: case_id
in: path
operations:
- name: get-case
method: GET
- name: update-case
method: PATCH
- type: http
namespace: anthropic
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: create-message
method: POST
Retrieves current trade positions from the Murex trading platform for a given portfolio, returning notional amounts, mark-to-market values, and counterparty exposure.
naftiko: "0.5"
info:
label: "Murex Trade Position Lookup"
description: "Retrieves current trade positions from the Murex trading platform for a given portfolio, returning notional amounts, mark-to-market values, and counterparty exposure."
tags:
- trading
- murex
- risk
- positions
capability:
exposes:
- type: mcp
namespace: murex-positions
port: 8080
tools:
- name: get-trade-positions
description: "Look up current trade positions for a portfolio in Murex."
inputParameters:
- name: portfolio_id
in: body
type: string
description: "Murex portfolio identifier."
- name: as_of_date
in: body
type: string
description: "Position date in YYYY-MM-DD format."
call: "murex.get-positions"
with:
portfolio_id: "{{portfolio_id}}"
as_of_date: "{{as_of_date}}"
outputParameters:
- name: positions
type: array
mapping: "$.data.positions"
- name: total_notional
type: number
mapping: "$.data.totalNotional"
- name: total_mtm
type: number
mapping: "$.data.totalMtM"
consumes:
- type: http
namespace: murex
baseUri: "https://murex.hsbc.com/api/v1"
authentication:
type: bearer
token: "$secrets.murex_api_token"
resources:
- name: positions
path: "/portfolios/{{portfolio_id}}/positions?asOfDate={{as_of_date}}"
inputParameters:
- name: portfolio_id
in: path
- name: as_of_date
in: query
operations:
- name: get-positions
method: GET
Processes firewall rule change requests by creating a ServiceNow change ticket, validating against Palo Alto policy, and notifying the network security team.
naftiko: "0.5"
info:
label: "Network Firewall Rule Change Workflow"
description: "Processes firewall rule change requests by creating a ServiceNow change ticket, validating against Palo Alto policy, and notifying the network security team."
tags:
- security
- network
- servicenow
- palo-alto
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: network-security
port: 8080
tools:
- name: request-firewall-change
description: "Given firewall rule details, create a ServiceNow change request and validate against existing Palo Alto policy."
inputParameters:
- name: source_ip
in: body
type: string
description: "Source IP or subnet."
- name: destination_ip
in: body
type: string
description: "Destination IP or subnet."
- name: port
in: body
type: string
description: "Port number."
- name: action
in: body
type: string
description: "Allow or deny."
steps:
- name: check-existing
type: call
call: "paloalto.get-rules"
with:
source: "{{source_ip}}"
destination: "{{destination_ip}}"
- name: create-change
type: call
call: "servicenow.create-change"
with:
short_description: "Firewall rule change: {{source_ip}} -> {{destination_ip}}:{{port}} ({{action}})"
description: "Existing rules: {{check-existing.count}}. Requested: {{action}} from {{source_ip}} to {{destination_ip}} on port {{port}}"
category: "network_security"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.network_security_channel_id"
message: "Firewall change request: {{source_ip}} -> {{destination_ip}}:{{port}}. Change: {{create-change.number}}"
consumes:
- type: http
namespace: paloalto
baseUri: "https://panorama.hsbc.com/restapi/v10.2"
authentication:
type: apikey
key: "X-PAN-KEY"
value: "$secrets.paloalto_api_key"
placement: header
resources:
- name: rules
path: "/Policies/SecurityRules"
operations:
- name: get-rules
method: GET
- type: http
namespace: servicenow
baseUri: "https://hsbc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Lists HSBC Okta users without MFA enrolled and opens a ServiceNow compliance task for the information security team.
naftiko: "0.5"
info:
label: "Okta MFA Policy Compliance Audit"
description: "Lists HSBC Okta users without MFA enrolled and opens a ServiceNow compliance task for the information security team."
tags:
- security
- identity
- okta
- servicenow
- compliance
capability:
exposes:
- type: mcp
namespace: identity-compliance
port: 8080
tools:
- name: audit-mfa-compliance
description: "Retrieve a list of active HSBC Okta users without MFA enrolled and create a ServiceNow security compliance task for remediation by the information security team."
steps:
- name: get-non-mfa-users
type: call
call: "okta-audit.list-users-without-mfa"
with:
filter: "status eq ACTIVE"
- name: create-compliance-task
type: call
call: "servicenow-audit.create-incident"
with:
short_description: "MFA Compliance: {{get-non-mfa-users.count}} HSBC users without MFA"
description: "Users without MFA: {{get-non-mfa-users.count}}. Immediate review required per HSBC information security policy."
category: "security_compliance"
priority: "1"
consumes:
- type: http
namespace: okta-audit
baseUri: "https://hsbc.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_token"
placement: header
resources:
- name: users
path: "/users"
inputParameters:
- name: filter
in: query
operations:
- name: list-users-without-mfa
method: GET
- type: http
namespace: servicenow-audit
baseUri: "https://hsbc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
When an employee termination is processed in Workday, deactivates the Okta account, revokes Salesforce license, and closes open ServiceNow tickets.
naftiko: "0.5"
info:
label: "Okta User Deprovisioning on Termination"
description: "When an employee termination is processed in Workday, deactivates the Okta account, revokes Salesforce license, and closes open ServiceNow tickets."
tags:
- hr
- security
- offboarding
- workday
- okta
- salesforce
- servicenow
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: deprovision-terminated-employee
description: "Given a Workday employee ID for a terminated HSBC employee, deactivate their Okta account, revoke Salesforce license, and close open ServiceNow tickets assigned to them."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID of the terminated employee."
steps:
- name: get-employee
type: call
call: "workday-term.get-worker"
with:
worker_id: "{{employee_id}}"
- name: deactivate-okta
type: call
call: "okta.deactivate-user"
with:
user_id: "{{get-employee.okta_user_id}}"
- name: revoke-salesforce
type: call
call: "salesforce-depro.update-user"
with:
user_id: "{{get-employee.salesforce_user_id}}"
is_active: "false"
- name: close-tickets
type: call
call: "servicenow-term.close-user-tickets"
with:
assigned_to: "{{get-employee.servicenow_user_id}}"
consumes:
- type: http
namespace: workday-term
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/hsbc/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta
baseUri: "https://hsbc.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_token"
placement: header
resources:
- name: users
path: "/users/{{user_id}}/lifecycle/deactivate"
inputParameters:
- name: user_id
in: path
operations:
- name: deactivate-user
method: POST
- type: http
namespace: salesforce-depro
baseUri: "https://hsbc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: users
path: "/sobjects/User/{{user_id}}"
inputParameters:
- name: user_id
in: path
operations:
- name: update-user
method: PATCH
- type: http
namespace: servicenow-term
baseUri: "https://hsbc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
inputParameters:
- name: assigned_to
in: query
operations:
- name: close-user-tickets
method: PATCH
Retrieves an Okta user profile by login email and returns the account status, last login time, and assigned groups for HSBC identity management.
naftiko: "0.5"
info:
label: "Okta User Status Lookup"
description: "Retrieves an Okta user profile by login email and returns the account status, last login time, and assigned groups for HSBC identity management."
tags:
- security
- identity
- okta
- lookup
capability:
exposes:
- type: mcp
namespace: identity-lookup
port: 8080
tools:
- name: get-okta-user
description: "Given an Okta user login email, return the user status, last login, and group memberships."
inputParameters:
- name: user_email
in: body
type: string
description: "The user login email address."
call: okta.get-user
with:
login: "{{user_email}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: last_login
type: string
mapping: "$.lastLogin"
- name: display_name
type: string
mapping: "$.profile.displayName"
consumes:
- type: http
namespace: okta
baseUri: "https://hsbc.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_token"
placement: header
resources:
- name: users
path: "/users/{{login}}"
inputParameters:
- name: login
in: path
operations:
- name: get-user
method: GET
Logs operational risk events by creating a ServiceNow incident, recording in Snowflake risk database, and notifying the risk team via Teams.
naftiko: "0.5"
info:
label: "Operational Risk Event Logger"
description: "Logs operational risk events by creating a ServiceNow incident, recording in Snowflake risk database, and notifying the risk team via Teams."
tags:
- risk
- operational-risk
- servicenow
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: oprisk-ops
port: 8080
tools:
- name: log-oprisk-event
description: "Given operational risk event details, create a ServiceNow incident, log to Snowflake, and notify the risk team."
inputParameters:
- name: event_title
in: body
type: string
description: "Title of the operational risk event."
- name: event_category
in: body
type: string
description: "Risk category (execution, fraud, systems, legal)."
- name: estimated_loss
in: body
type: number
description: "Estimated financial loss."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "OpRisk: {{event_title}}"
description: "Category: {{event_category}}. Estimated loss: {{estimated_loss}}"
category: "operational_risk"
priority: "High"
- name: log-to-snowflake
type: call
call: "snowflake.execute-statement"
with:
statement: "INSERT INTO risk.op_risk_events (title, category, estimated_loss, logged_date) VALUES ('{{event_title}}', '{{event_category}}', {{estimated_loss}}, CURRENT_DATE)"
- name: notify-risk
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.risk_channel_id"
message: "OpRisk event logged: {{event_title}}. Category: {{event_category}}. Loss: {{estimated_loss}}. Incident: {{create-incident.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://hsbc.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: snowflake
baseUri: "https://hsbc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves a PagerDuty incident by ID and returns the title, urgency, status, and assigned user for HSBC operations.
naftiko: "0.5"
info:
label: "PagerDuty Incident Lookup"
description: "Retrieves a PagerDuty incident by ID and returns the title, urgency, status, and assigned user for HSBC operations."
tags:
- operations
- pagerduty
- itsm
- lookup
capability:
exposes:
- type: mcp
namespace: ops-lookup
port: 8080
tools:
- name: get-pagerduty-incident
description: "Given a PagerDuty incident ID, return the title, urgency, status, and assigned user."
inputParameters:
- name: incident_id
in: body
type: string
description: "The PagerDuty incident ID."
call: pagerduty.get-incident
with:
incident_id: "{{incident_id}}"
outputParameters:
- name: title
type: string
mapping: "$.incident.title"
- name: urgency
type: string
mapping: "$.incident.urgency"
- name: status
type: string
mapping: "$.incident.status"
- name: assignee
type: string
mapping: "$.incident.assignments[0].assignee.summary"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents/{{incident_id}}"
inputParameters:
- name: incident_id
in: path
operations:
- name: get-incident
method: GET
Retrieves the current PagerDuty on-call engineer for an HSBC service and posts contact information to the operations Teams channel.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Schedule Lookup"
description: "Retrieves the current PagerDuty on-call engineer for an HSBC service and posts contact information to the operations Teams channel."
tags:
- itsm
- operations
- pagerduty
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: oncall-ops
port: 8080
tools:
- name: get-oncall-contact
description: "Given a PagerDuty schedule ID for an HSBC service, return the currently on-call engineer name and contact details, and post to the HSBC IT ops Teams channel."
inputParameters:
- name: schedule_id
in: body
type: string
description: "The PagerDuty schedule ID for the HSBC service team."
steps:
- name: get-oncall
type: call
call: "pagerduty-oncall.get-oncall"
with:
schedule_id: "{{schedule_id}}"
- name: notify-channel
type: call
call: "msteams-oncall.post-channel-message"
with:
channel_id: "$secrets.ops_channel_id"
message: "On-call for schedule {{schedule_id}}: {{get-oncall.user_name}} ({{get-oncall.user_email}})"
consumes:
- type: http
namespace: pagerduty-oncall
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: oncalls
path: "/oncalls"
inputParameters:
- name: schedule_id
in: query
operations:
- name: get-oncall
method: GET
- type: http
namespace: msteams-oncall
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Audits Palo Alto Networks firewall security policies for HSBC network segments and flags unrestricted outbound rules in ServiceNow.
naftiko: "0.5"
info:
label: "Palo Alto Firewall Security Policy Audit"
description: "Audits Palo Alto Networks firewall security policies for HSBC network segments and flags unrestricted outbound rules in ServiceNow."
tags:
- security
- network
- palo-alto
- servicenow
- compliance
- banking
capability:
exposes:
- type: mcp
namespace: network-security
port: 8080
tools:
- name: audit-firewall-policies
description: "Query Palo Alto Networks Panorama for all security policies on the specified HSBC device group, identify policies with destination 'any' and action 'allow', and open a ServiceNow security task for each non-compliant rule."
inputParameters:
- name: device_group
in: body
type: string
description: "The Palo Alto Panorama device group name for the HSBC network segment to audit."
steps:
- name: get-policies
type: call
call: "paloalto.list-security-policies"
with:
device_group: "{{device_group}}"
- name: create-audit-task
type: call
call: "servicenow-net.create-incident"
with:
short_description: "Firewall audit: {{get-policies.unrestricted_count}} unrestricted rules in {{device_group}}"
description: "Device group: {{device_group}}\nPolicies with unrestricted outbound: {{get-policies.unrestricted_count}}"
category: "network_security"
priority: "1"
consumes:
- type: http
namespace: paloalto
baseUri: "https://hsbc-panorama.hsbc.com/restapi/v10.1"
authentication:
type: apikey
key: "X-PAN-KEY"
value: "$secrets.paloalto_api_key"
placement: header
resources:
- name: security-policies
path: "/Objects/SecurityRules"
inputParameters:
- name: device_group
in: query
operations:
- name: list-security-policies
method: GET
- type: http
namespace: servicenow-net
baseUri: "https://hsbc.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 last refresh status and timing for a Power BI dataset used in HSBC financial reporting.
naftiko: "0.5"
info:
label: "Power BI Dataset Refresh Status Lookup"
description: "Retrieves the last refresh status and timing for a Power BI dataset used in HSBC financial reporting."
tags:
- analytics
- power-bi
- reporting
- lookup
capability:
exposes:
- type: mcp
namespace: bi-lookup
port: 8080
tools:
- name: get-dataset-refresh-status
description: "Given a Power BI dataset ID and workspace ID, return the last refresh status and end time."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Power BI workspace ID."
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID."
call: powerbi.get-refresh-history
with:
group_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
outputParameters:
- name: status
type: string
mapping: "$.value[0].status"
- name: end_time
type: string
mapping: "$.value[0].endTime"
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: refresh-history
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: get-refresh-history
method: GET
Triggers a Power BI dataset refresh for the HSBC financial reporting dashboard and notifies the finance team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Power BI Finance Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for the HSBC financial reporting dashboard and notifies the finance team via Microsoft Teams."
tags:
- finance
- reporting
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: finance-reporting
port: 8080
tools:
- name: refresh-finance-dashboard
description: "Trigger a Power BI dataset refresh for the HSBC financial reporting dashboard and notify the finance Teams channel that data is current."
inputParameters:
- name: dataset_id
in: body
type: string
description: "The Power BI dataset ID for the HSBC finance dashboard."
- name: period
in: body
type: string
description: "The fiscal period being refreshed, e.g. 2026-Q1."
steps:
- name: trigger-refresh
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "{{dataset_id}}"
- name: notify-finance
type: call
call: "msteams-finance.post-channel-message"
with:
channel_id: "$secrets.finance_channel_id"
message: "HSBC finance dashboard refreshed for {{period}}. Dataset {{dataset_id}} is now current."
consumes:
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: msteams-finance
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Performs quarterly privileged access reviews by pulling Okta admin users, cross-referencing with Workday active employees, and creating ServiceNow review tasks.
naftiko: "0.5"
info:
label: "Privileged Access Review Orchestrator"
description: "Performs quarterly privileged access reviews by pulling Okta admin users, cross-referencing with Workday active employees, and creating ServiceNow review tasks."
tags:
- security
- access-review
- okta
- workday
- servicenow
capability:
exposes:
- type: mcp
namespace: access-review
port: 8080
tools:
- name: run-privileged-access-review
description: "Pull all Okta admin users, verify against Workday active employees, and create ServiceNow tasks for any discrepancies."
inputParameters:
- name: review_period
in: body
type: string
description: "The review period label, e.g. 'Q1-2026'."
steps:
- name: get-admin-users
type: call
call: "okta.list-admin-users"
with:
filter: "status eq \"ACTIVE\""
- name: verify-employment
type: call
call: "workday.get-active-workers"
with:
as_of_date: "2026-03-27"
- name: create-review-task
type: call
call: "servicenow.create-request"
with:
short_description: "Privileged access review: {{review_period}}"
description: "Admin users: {{get-admin-users.count}}. Active employees: {{verify-employment.count}}. Review discrepancies."
category: "security_review"
assigned_to: "Security_Governance"
consumes:
- type: http
namespace: okta
baseUri: "https://hsbc.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_token"
placement: header
resources:
- name: users
path: "/users"
operations:
- name: list-admin-users
method: GET
- 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: "/hsbc/workers"
operations:
- name: get-active-workers
method: GET
- type: http
namespace: servicenow
baseUri: "https://hsbc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
Orchestrates quarterly earnings data collection from SAP, loads to Snowflake, refreshes Power BI dashboards, and notifies the finance team.
naftiko: "0.5"
info:
label: "Quarterly Earnings Data Pipeline"
description: "Orchestrates quarterly earnings data collection from SAP, loads to Snowflake, refreshes Power BI dashboards, and notifies the finance team."
tags:
- finance
- reporting
- sap
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: earnings-pipeline
port: 8080
tools:
- name: run-earnings-pipeline
description: "Given a fiscal quarter and year, extract SAP financial data, load to Snowflake, refresh Power BI, and notify finance."
inputParameters:
- name: fiscal_quarter
in: body
type: string
description: "The fiscal quarter, e.g. 'Q1'."
- name: fiscal_year
in: body
type: string
description: "The fiscal year, e.g. '2026'."
steps:
- name: extract-sap-data
type: call
call: "sap-erp.get-financial-data"
with:
quarter: "{{fiscal_quarter}}"
year: "{{fiscal_year}}"
- name: load-snowflake
type: call
call: "snowflake.execute-statement"
with:
statement: "CALL finance.load_quarterly_earnings('{{fiscal_quarter}}', '{{fiscal_year}}')"
- name: refresh-powerbi
type: call
call: "powerbi.trigger-refresh"
with:
group_id: "$secrets.finance_workspace_id"
dataset_id: "$secrets.earnings_dataset_id"
- name: notify-finance
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.finance_channel_id"
message: "{{fiscal_quarter}} {{fiscal_year}} earnings data pipeline complete. Power BI dashboard refreshed."
consumes:
- type: http
namespace: sap-erp
baseUri: "https://hsbc-s4.sap.com/sap/opu/odata/sap/API_FINANCIAL_STATEMENT"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: financial-data
path: "/A_FinancialStatement"
operations:
- name: get-financial-data
method: GET
- type: http
namespace: snowflake
baseUri: "https://hsbc.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: refreshes
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves real-time foreign exchange rates from Refinitiv Eikon for a given currency pair, returning bid, ask, mid-rate, and timestamp.
naftiko: "0.5"
info:
label: "Refinitiv Eikon FX Rate Lookup"
description: "Retrieves real-time foreign exchange rates from Refinitiv Eikon for a given currency pair, returning bid, ask, mid-rate, and timestamp."
tags:
- fx
- trading
- refinitiv
- market-data
capability:
exposes:
- type: mcp
namespace: fx-rates
port: 8080
tools:
- name: get-fx-rate
description: "Look up the current FX rate for a currency pair from Refinitiv Eikon."
inputParameters:
- name: currency_pair
in: body
type: string
description: "Currency pair in ISO format, e.g. GBPUSD."
call: "refinitiv.get-pricing"
with:
ric: "{{currency_pair}}=X"
outputParameters:
- name: bid
type: number
mapping: "$.data[0].fields.BID"
- name: ask
type: number
mapping: "$.data[0].fields.ASK"
- name: mid_rate
type: number
mapping: "$.data[0].fields.MID_PRICE"
- name: timestamp
type: string
mapping: "$.data[0].fields.TIMESTAMP"
consumes:
- type: http
namespace: refinitiv
baseUri: "https://api.refinitiv.com/data/pricing/v1"
authentication:
type: bearer
token: "$secrets.refinitiv_token"
resources:
- name: pricing
path: "/views/summaries/{{ric}}"
inputParameters:
- name: ric
in: path
operations:
- name: get-pricing
method: GET
Checks Basel III capital adequacy ratios from Snowflake, compares against regulatory minimums, and alerts the risk committee via Teams.
naftiko: "0.5"
info:
label: "Regulatory Capital Adequacy Check"
description: "Checks Basel III capital adequacy ratios from Snowflake, compares against regulatory minimums, and alerts the risk committee via Teams."
tags:
- risk
- regulatory
- capital
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: capital-ops
port: 8080
tools:
- name: check-capital-adequacy
description: "Given a reporting date, query capital ratios from Snowflake and alert if below regulatory thresholds."
inputParameters:
- name: report_date
in: body
type: string
description: "The reporting date in YYYY-MM-DD format."
steps:
- name: get-ratios
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT cet1_ratio, tier1_ratio, total_capital_ratio, leverage_ratio FROM risk.capital_adequacy WHERE report_date = '{{report_date}}'"
- name: publish-report
type: call
call: "confluence.create-page"
with:
space_key: "RISK"
title: "Capital Adequacy Report - {{report_date}}"
body: "CET1: {{get-ratios.cet1_ratio}}%. Tier 1: {{get-ratios.tier1_ratio}}%. Total Capital: {{get-ratios.total_capital_ratio}}%."
- name: notify-risk
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.risk_committee_channel_id"
message: "Capital adequacy report for {{report_date}} published. CET1: {{get-ratios.cet1_ratio}}%"
consumes:
- type: http
namespace: snowflake
baseUri: "https://hsbc.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: confluence
baseUri: "https://hsbc.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Generates a regulatory report by querying Snowflake for compliance data, summarizing with Anthropic AI, and posting to Confluence for HSBC regulatory teams.
naftiko: "0.5"
info:
label: "Regulatory Report Generation Workflow"
description: "Generates a regulatory report by querying Snowflake for compliance data, summarizing with Anthropic AI, and posting to Confluence for HSBC regulatory teams."
tags:
- compliance
- regulatory
- snowflake
- anthropic
- confluence
capability:
exposes:
- type: mcp
namespace: regulatory-ops
port: 8080
tools:
- name: generate-regulatory-report
description: "Given a report type and date range, query compliance data from Snowflake, generate an AI summary, and publish to Confluence."
inputParameters:
- name: report_type
in: body
type: string
description: "The regulatory report type (e.g., 'Basel III', 'MiFID II')."
- name: period_end
in: body
type: string
description: "Report period end date in YYYY-MM-DD format."
steps:
- name: query-data
type: call
call: "snowflake.execute-statement"
with:
statement: "CALL compliance.generate_{{report_type}}_data('{{period_end}}')"
- name: summarize
type: call
call: "anthropic.create-message"
with:
model: "claude-sonnet-4-20250514"
message: "Summarize the following regulatory data for a {{report_type}} compliance report: {{query-data.results}}"
- name: publish-report
type: call
call: "confluence.create-page"
with:
space_key: "COMPLIANCE"
title: "{{report_type}} Report - {{period_end}}"
body: "{{summarize.content}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://hsbc.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: anthropic
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: create-message
method: POST
- type: http
namespace: confluence
baseUri: "https://hsbc.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Generates pre-meeting client briefs by pulling Salesforce account data, Bloomberg market context, and summarizing via AI for HSBC relationship managers.
naftiko: "0.5"
info:
label: "Relationship Manager Client Brief Generator"
description: "Generates pre-meeting client briefs by pulling Salesforce account data, Bloomberg market context, and summarizing via AI for HSBC relationship managers."
tags:
- banking
- crm
- salesforce
- bloomberg
- anthropic
capability:
exposes:
- type: mcp
namespace: rm-ops
port: 8080
tools:
- name: generate-client-brief
description: "Given a Salesforce account ID, pull client data, market context, and generate an AI-powered meeting brief."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID."
steps:
- name: get-client
type: call
call: "salesforce.get-account"
with:
account_id: "{{account_id}}"
- name: get-market-data
type: call
call: "bloomberg.get-company-data"
with:
company: "{{get-client.Name}}"
- name: generate-brief
type: call
call: "anthropic.create-message"
with:
model: "claude-sonnet-4-20250514"
message: "Generate a concise client meeting brief for {{get-client.Name}}. Revenue: {{get-client.AnnualRevenue}}. Industry: {{get-client.Industry}}. Market data: {{get-market-data.summary}}. Recent interactions: {{get-client.Last_Activity__c}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://hsbc.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: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: companies
path: "/company/{{company}}"
inputParameters:
- name: company
in: path
operations:
- name: get-company-data
method: GET
- type: http
namespace: anthropic
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: create-message
method: POST
Retrieves a Salesforce corporate banking account by ID, returning account name, industry, relationship manager, and total revenue for HSBC relationship teams.
naftiko: "0.5"
info:
label: "Salesforce Account Lookup"
description: "Retrieves a Salesforce corporate banking account by ID, returning account name, industry, relationship manager, and total revenue for HSBC relationship teams."
tags:
- crm
- salesforce
- banking
- lookup
capability:
exposes:
- type: mcp
namespace: crm-lookup
port: 8080
tools:
- name: get-account
description: "Given a Salesforce account ID, return the account name, industry, assigned relationship manager, and annual revenue."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID."
call: salesforce.get-account
with:
account_id: "{{account_id}}"
outputParameters:
- name: name
type: string
mapping: "$.Name"
- name: industry
type: string
mapping: "$.Industry"
- name: owner
type: string
mapping: "$.Owner.Name"
- name: annual_revenue
type: string
mapping: "$.AnnualRevenue"
consumes:
- type: http
namespace: salesforce
baseUri: "https://hsbc.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
Generates an account health scorecard for HSBC corporate banking clients by aggregating open opportunities, service requests, and relationship activity from Salesforce, then refreshes a Power BI dashboard.
naftiko: "0.5"
info:
label: "Salesforce Client Account Health Scorecard"
description: "Generates an account health scorecard for HSBC corporate banking clients by aggregating open opportunities, service requests, and relationship activity from Salesforce, then refreshes a Power BI dashboard."
tags:
- sales
- customer-success
- salesforce
- power-bi
- reporting
- banking
capability:
exposes:
- type: mcp
namespace: account-health
port: 8080
tools:
- name: publish-client-scorecard
description: "Given a Salesforce account ID for an HSBC corporate banking client, retrieve open pipeline, service requests, and last relationship activity, then trigger a Power BI dataset refresh for the client health dashboard."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID (18-char) for the HSBC corporate banking client."
steps:
- name: get-account-data
type: call
call: "salesforce-health.get-account"
with:
account_id: "{{account_id}}"
- name: get-open-cases
type: call
call: "salesforce-cases.query-cases"
with:
account_id: "{{account_id}}"
status: "Open"
- name: refresh-dashboard
type: call
call: "powerbi-health.refresh-dataset"
with:
dataset_id: "$secrets.client_health_dataset_id"
consumes:
- type: http
namespace: salesforce-health
baseUri: "https://hsbc.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: salesforce-cases
baseUri: "https://hsbc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/query"
inputParameters:
- name: account_id
in: query
- name: status
in: query
operations:
- name: query-cases
method: GET
- type: http
namespace: powerbi-health
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: dataset-refreshes
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
When a Salesforce opportunity for a corporate banking client is updated, logs the activity against the client account and notifies the relationship manager via Teams.
naftiko: "0.5"
info:
label: "Salesforce Client Relationship Opportunity Sync"
description: "When a Salesforce opportunity for a corporate banking client is updated, logs the activity against the client account and notifies the relationship manager via Teams."
tags:
- sales
- crm
- salesforce
- microsoft-teams
- banking
capability:
exposes:
- type: mcp
namespace: crm-banking
port: 8080
tools:
- name: sync-opportunity-update
description: "Given a Salesforce opportunity ID, retrieve the latest update, log a completed activity against the client account, and notify the assigned relationship manager via Microsoft Teams."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity ID (18-char SFDC ID) that was updated."
steps:
- name: get-opportunity
type: call
call: "salesforce-opp.get-opportunity"
with:
opportunity_id: "{{opportunity_id}}"
- name: log-activity
type: call
call: "salesforce-activity.create-task"
with:
what_id: "{{opportunity_id}}"
subject: "Opportunity update: {{get-opportunity.name}}"
status: "Completed"
owner_id: "{{get-opportunity.owner_id}}"
- name: notify-rm
type: call
call: "msteams-rm.send-message"
with:
recipient: "{{get-opportunity.owner_email}}"
message: "Opportunity {{get-opportunity.name}} updated to stage {{get-opportunity.stage_name}}. Activity logged."
consumes:
- type: http
namespace: salesforce-opp
baseUri: "https://hsbc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: get-opportunity
method: GET
- type: http
namespace: salesforce-activity
baseUri: "https://hsbc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: tasks
path: "/sobjects/Task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams-rm
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient}}/sendMail"
inputParameters:
- name: recipient
in: path
operations:
- name: send-message
method: POST
Enriches new Salesforce corporate banking leads with firmographic data from ZoomInfo and updates the lead record with company financials and industry classification.
naftiko: "0.5"
info:
label: "Salesforce Corporate Banking Lead Enrichment"
description: "Enriches new Salesforce corporate banking leads with firmographic data from ZoomInfo and updates the lead record with company financials and industry classification."
tags:
- sales
- crm
- salesforce
- zoominfo
- lead-enrichment
- banking
capability:
exposes:
- type: mcp
namespace: sales-intelligence
port: 8080
tools:
- name: enrich-corporate-lead
description: "Given a Salesforce lead ID for a corporate banking prospect, look up firmographic data in ZoomInfo and update the lead record with company size, revenue, and industry for relationship manager prioritization."
inputParameters:
- name: lead_id
in: body
type: string
description: "The Salesforce lead record ID (18-char SFDC ID)."
steps:
- name: get-lead
type: call
call: "salesforce-lead.get-lead"
with:
lead_id: "{{lead_id}}"
- name: enrich-company
type: call
call: "zoominfo.search-company"
with:
company_name: "{{get-lead.company}}"
website: "{{get-lead.website}}"
- name: update-lead
type: call
call: "salesforce-lead-update.update-lead"
with:
lead_id: "{{lead_id}}"
employee_count: "{{enrich-company.employee_count}}"
annual_revenue: "{{enrich-company.annual_revenue}}"
industry: "{{enrich-company.industry}}"
consumes:
- type: http
namespace: salesforce-lead
baseUri: "https://hsbc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead/{{lead_id}}"
inputParameters:
- name: lead_id
in: path
operations:
- name: get-lead
method: GET
- type: http
namespace: zoominfo
baseUri: "https://api.zoominfo.com/search"
authentication:
type: bearer
token: "$secrets.zoominfo_token"
resources:
- name: companies
path: "/company"
operations:
- name: search-company
method: POST
- type: http
namespace: salesforce-lead-update
baseUri: "https://hsbc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead/{{lead_id}}"
inputParameters:
- name: lead_id
in: path
operations:
- name: update-lead
method: PATCH
Screens customer or counterparty names against sanctions lists, logs results in Salesforce, and alerts compliance via Teams if a match is found.
naftiko: "0.5"
info:
label: "Sanctions Screening Workflow"
description: "Screens customer or counterparty names against sanctions lists, logs results in Salesforce, and alerts compliance via Teams if a match is found."
tags:
- compliance
- sanctions
- salesforce
- microsoft-teams
- banking
capability:
exposes:
- type: mcp
namespace: sanctions-ops
port: 8080
tools:
- name: screen-sanctions
description: "Given a customer name and account ID, run sanctions screening, update Salesforce, and alert compliance if matched."
inputParameters:
- name: customer_name
in: body
type: string
description: "The customer or counterparty name to screen."
- name: account_id
in: body
type: string
description: "The Salesforce account ID."
steps:
- name: run-screening
type: call
call: "sanctions-api.screen"
with:
name: "{{customer_name}}"
- name: update-salesforce
type: call
call: "salesforce.update-account"
with:
account_id: "{{account_id}}"
Sanctions_Check_Date__c: "2026-03-27"
Sanctions_Status__c: "{{run-screening.status}}"
- name: notify-compliance
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.compliance_channel_id"
message: "Sanctions screening for {{customer_name}}: {{run-screening.status}}. Matches: {{run-screening.match_count}}"
consumes:
- type: http
namespace: sanctions-api
baseUri: "https://sanctions-api.hsbc.com/v1"
authentication:
type: bearer
token: "$secrets.sanctions_token"
resources:
- name: screening
path: "/screen"
operations:
- name: screen
method: POST
- type: http
namespace: salesforce
baseUri: "https://hsbc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: update-account
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves submitted SAP Concur expense reports for HSBC employees, validates against T&E policy, and flags non-compliant reports in ServiceNow.
naftiko: "0.5"
info:
label: "SAP Concur Expense Report Audit"
description: "Retrieves submitted SAP Concur expense reports for HSBC employees, validates against T&E policy, and flags non-compliant reports in ServiceNow."
tags:
- finance
- expense-management
- sap-concur
- servicenow
- compliance
capability:
exposes:
- type: mcp
namespace: finance-compliance
port: 8080
tools:
- name: audit-expense-report
description: "Given a SAP Concur expense report ID, retrieve the line items, validate against HSBC travel and expense policy, and open a ServiceNow compliance task if violations are detected."
inputParameters:
- name: report_id
in: body
type: string
description: "The SAP Concur expense report ID."
steps:
- name: get-report
type: call
call: "concur.get-expense-report"
with:
report_id: "{{report_id}}"
- name: flag-violation
type: call
call: "servicenow-fin.create-incident"
with:
short_description: "Expense policy violation: Report {{report_id}}"
description: "Concur report {{report_id}} by {{get-report.employee_name}} contains items requiring review per HSBC T&E policy."
category: "finance_compliance"
consumes:
- type: http
namespace: concur
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: expense-reports
path: "/expense/reports/{{report_id}}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-expense-report
method: GET
- type: http
namespace: servicenow-fin
baseUri: "https://hsbc.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 current balance for a specified SAP general ledger account and company code at HSBC.
naftiko: "0.5"
info:
label: "SAP General Ledger Balance Lookup"
description: "Retrieves the current balance for a specified SAP general ledger account and company code at HSBC."
tags:
- finance
- erp
- sap
- lookup
capability:
exposes:
- type: mcp
namespace: erp-finance
port: 8080
tools:
- name: get-gl-balance
description: "Given an SAP GL account number and company code, return the current period balance and currency."
inputParameters:
- name: gl_account
in: body
type: string
description: "The SAP general ledger account number."
- name: company_code
in: body
type: string
description: "The SAP company code."
call: sap-erp.get-gl-balance
with:
gl_account: "{{gl_account}}"
company_code: "{{company_code}}"
outputParameters:
- name: balance
type: string
mapping: "$.d.Balance"
- name: currency
type: string
mapping: "$.d.Currency"
- name: period
type: string
mapping: "$.d.FiscalPeriod"
consumes:
- type: http
namespace: sap-erp
baseUri: "https://hsbc-s4.sap.com/sap/opu/odata/sap/API_GLACCOUNTBALANCE"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: gl-balances
path: "/GLAccountBalanceSet(GLAccount='{{gl_account}}',CompanyCode='{{company_code}}')"
inputParameters:
- name: gl_account
in: path
- name: company_code
in: path
operations:
- name: get-gl-balance
method: GET
Retrieves purchase order details from SAP including status, vendor, and total amount for HSBC procurement teams.
naftiko: "0.5"
info:
label: "SAP Purchase Order Status Lookup"
description: "Retrieves purchase order details from SAP including status, vendor, and total amount for HSBC procurement teams."
tags:
- finance
- procurement
- sap
- lookup
capability:
exposes:
- type: mcp
namespace: erp-procurement
port: 8080
tools:
- name: get-purchase-order
description: "Given a SAP purchase order number, return the PO status, vendor, and total amount."
inputParameters:
- name: po_number
in: body
type: string
description: "SAP purchase order number."
call: sap-erp.get-po
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.d.OverallStatus"
- name: vendor
type: string
mapping: "$.d.Supplier.CompanyName"
- name: total_amount
type: string
mapping: "$.d.TotalAmount"
consumes:
- type: http
namespace: sap-erp
baseUri: "https://hsbc-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Retrieves vendor master data from SAP by vendor number, returning company name, payment terms, and bank details for HSBC procurement.
naftiko: "0.5"
info:
label: "SAP Vendor Master Lookup"
description: "Retrieves vendor master data from SAP by vendor number, returning company name, payment terms, and bank details for HSBC procurement."
tags:
- finance
- procurement
- sap
- lookup
capability:
exposes:
- type: mcp
namespace: erp-vendor
port: 8080
tools:
- name: get-vendor
description: "Given a SAP vendor number, return the vendor name, payment terms, and bank details."
inputParameters:
- name: vendor_number
in: body
type: string
description: "The SAP vendor master number."
call: sap-erp.get-vendor
with:
vendor_id: "{{vendor_number}}"
outputParameters:
- name: vendor_name
type: string
mapping: "$.d.CompanyName"
- name: payment_terms
type: string
mapping: "$.d.PaymentTerms"
- name: bank_account
type: string
mapping: "$.d.BankAccount"
consumes:
- type: http
namespace: sap-erp
baseUri: "https://hsbc-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: vendors
path: "/A_Supplier('{{vendor_id}}')"
inputParameters:
- name: vendor_id
in: path
operations:
- name: get-vendor
method: GET
Orchestrates security incident response by querying Splunk logs, creating a PagerDuty incident, and logging a Jira security issue for HSBC cybersecurity.
naftiko: "0.5"
info:
label: "Security Incident Response Orchestrator"
description: "Orchestrates security incident response by querying Splunk logs, creating a PagerDuty incident, and logging a Jira security issue for HSBC cybersecurity."
tags:
- security
- incident-response
- splunk
- pagerduty
- jira
capability:
exposes:
- type: mcp
namespace: security-ops
port: 8080
tools:
- name: respond-to-security-incident
description: "Given a Splunk alert ID, pull event details, create a PagerDuty incident, and log a Jira security ticket."
inputParameters:
- name: alert_id
in: body
type: string
description: "The Splunk alert ID."
steps:
- name: get-alert-details
type: call
call: "splunk.get-alert"
with:
alert_id: "{{alert_id}}"
- name: create-pd-incident
type: call
call: "pagerduty.create-incident"
with:
title: "Security alert: {{get-alert-details.title}}"
service_id: "$secrets.security_service_id"
urgency: "high"
- name: create-jira-ticket
type: call
call: "jira.create-issue"
with:
project: "SEC"
summary: "Security incident: {{get-alert-details.title}}"
description: "Splunk alert: {{alert_id}}. Details: {{get-alert-details.description}}. PagerDuty: {{create-pd-incident.id}}"
issuetype: "Bug"
priority: "Critical"
consumes:
- type: http
namespace: splunk
baseUri: "https://hsbc-splunk.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: alerts
path: "/alerts/fired_alerts/{{alert_id}}"
inputParameters:
- name: alert_id
in: path
operations:
- name: get-alert
method: GET
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: jira
baseUri: "https://hsbc.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Retrieves a ServiceNow incident by number and returns the short description, state, priority, and assigned group for HSBC IT operations.
naftiko: "0.5"
info:
label: "ServiceNow Incident Lookup"
description: "Retrieves a ServiceNow incident by number and returns the short description, state, priority, and assigned group for HSBC IT operations."
tags:
- itsm
- servicenow
- lookup
capability:
exposes:
- type: mcp
namespace: itsm-lookup
port: 8080
tools:
- name: get-incident
description: "Given a ServiceNow incident number, return the short description, state, priority, and assignment group."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number, e.g. 'INC0012345'."
call: servicenow.get-incident
with:
number: "{{incident_number}}"
outputParameters:
- name: short_description
type: string
mapping: "$.result.short_description"
- name: state
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
- name: assignment_group
type: string
mapping: "$.result.assignment_group.display_value"
consumes:
- type: http
namespace: servicenow
baseUri: "https://hsbc.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
Creates a ServiceNow change request for a planned HSBC banking system update and notifies IT stakeholders via Microsoft Teams.
naftiko: "0.5"
info:
label: "ServiceNow IT Change Request for Banking Systems"
description: "Creates a ServiceNow change request for a planned HSBC banking system update and notifies IT stakeholders via Microsoft Teams."
tags:
- itsm
- change-management
- servicenow
- microsoft-teams
- banking
capability:
exposes:
- type: mcp
namespace: change-management
port: 8080
tools:
- name: submit-change-request
description: "Given a system name, change description, and implementation window, create a ServiceNow normal change request for the HSBC banking system, assign to the CAB group, and notify stakeholders in Teams."
inputParameters:
- name: system_name
in: body
type: string
description: "The name of the HSBC banking system or service being changed."
- name: change_description
in: body
type: string
description: "A detailed description of the planned change."
- name: planned_start
in: body
type: string
description: "Planned start datetime in ISO 8601 format."
- name: planned_end
in: body
type: string
description: "Planned end datetime in ISO 8601 format."
steps:
- name: create-change
type: call
call: "servicenow-chg.create-change-request"
with:
short_description: "Change: {{system_name}}"
description: "{{change_description}}"
start_date: "{{planned_start}}"
end_date: "{{planned_end}}"
type: "normal"
assignment_group: "CAB"
- name: notify-stakeholders
type: call
call: "msteams-chg.post-channel-message"
with:
channel_id: "$secrets.itops_channel_id"
message: "Change request submitted for {{system_name}}. SNOW: {{create-change.number}}. Planned: {{planned_start}} to {{planned_end}}."
consumes:
- type: http
namespace: servicenow-chg
baseUri: "https://hsbc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: change-requests
path: "/table/change_request"
operations:
- name: create-change-request
method: POST
- type: http
namespace: msteams-chg
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
When a P1 incident is raised in ServiceNow for HSBC banking systems, pages the on-call engineer via PagerDuty and posts a war-room message to Microsoft Teams.
naftiko: "0.5"
info:
label: "ServiceNow P1 Incident Response Chain"
description: "When a P1 incident is raised in ServiceNow for HSBC banking systems, pages the on-call engineer via PagerDuty and posts a war-room message to Microsoft Teams."
tags:
- itsm
- incident-response
- servicenow
- pagerduty
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: itsm-ops
port: 8080
tools:
- name: handle-p1-incident
description: "Given a ServiceNow P1 incident number for an HSBC banking system outage, page the on-call engineer via PagerDuty and post a war-room message to the IT ops Teams channel."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number, e.g. INC0012345."
steps:
- name: get-incident
type: call
call: "servicenow-read.get-incident"
with:
number: "{{incident_number}}"
- name: page-oncall
type: call
call: "pagerduty.create-incident"
with:
title: "P1: {{get-incident.short_description}}"
service_id: "$secrets.pagerduty_service_id"
details: "SNOW: {{incident_number}}"
- name: post-warroom
type: call
call: "msteams-war.post-channel-message"
with:
channel_id: "$secrets.warroom_channel_id"
message: "P1 INCIDENT: {{get-incident.short_description}} | PagerDuty: {{page-oncall.incident_id}}"
consumes:
- type: http
namespace: servicenow-read
baseUri: "https://hsbc.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: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams-war
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Detects SLA breaches in ServiceNow, escalates via PagerDuty, and posts a summary to the operations Teams channel.
naftiko: "0.5"
info:
label: "SLA Breach Escalation Workflow"
description: "Detects SLA breaches in ServiceNow, escalates via PagerDuty, and posts a summary to the operations Teams channel."
tags:
- itsm
- sla
- servicenow
- pagerduty
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sla-ops
port: 8080
tools:
- name: escalate-sla-breach
description: "Given a ServiceNow incident number that has breached SLA, escalate via PagerDuty and notify the ops team."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number."
steps:
- name: get-incident
type: call
call: "servicenow.get-incident"
with:
number: "{{incident_number}}"
- name: escalate
type: call
call: "pagerduty.create-incident"
with:
title: "SLA breach: {{incident_number}} - {{get-incident.short_description}}"
service_id: "$secrets.ops_service_id"
urgency: "high"
- name: notify-ops
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.ops_channel_id"
message: "SLA breach escalation: {{incident_number}}. Priority: {{get-incident.priority}}. PagerDuty: {{escalate.id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://hsbc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: get-incident
method: GET
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Runs data quality validation queries on HSBC's Snowflake risk analytics datasets and alerts the data engineering team via Microsoft Teams if quality thresholds are breached.
naftiko: "0.5"
info:
label: "Snowflake Risk Data Quality Check"
description: "Runs data quality validation queries on HSBC's Snowflake risk analytics datasets and alerts the data engineering team via Microsoft Teams if quality thresholds are breached."
tags:
- data
- analytics
- snowflake
- microsoft-teams
- risk
- monitoring
capability:
exposes:
- type: mcp
namespace: data-risk-ops
port: 8080
tools:
- name: run-risk-data-quality-check
description: "Execute a named Snowflake data quality stored procedure on HSBC risk datasets and send a Teams alert to the data engineering channel if the quality score falls below threshold."
inputParameters:
- name: check_name
in: body
type: string
description: "The Snowflake stored procedure name for the risk data quality check."
- name: quality_threshold
in: body
type: number
description: "Minimum acceptable quality score (0–100)."
steps:
- name: run-check
type: call
call: "snowflake.execute-statement"
with:
statement: "CALL risk_data_quality.{{check_name}}()"
- name: send-alert
type: call
call: "msteams-data.post-channel-message"
with:
channel_id: "$secrets.data_eng_channel_id"
message: "Risk data quality check {{check_name}} complete. Score: {{run-check.quality_score}}."
consumes:
- type: http
namespace: snowflake
baseUri: "https://hsbc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: msteams-data
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Executes a Snowflake query to retrieve daily trade volume aggregates for a given HSBC trading desk and date range.
naftiko: "0.5"
info:
label: "Snowflake Trade Volume Query"
description: "Executes a Snowflake query to retrieve daily trade volume aggregates for a given HSBC trading desk and date range."
tags:
- data
- analytics
- snowflake
- trading
- lookup
capability:
exposes:
- type: mcp
namespace: trading-analytics
port: 8080
tools:
- name: get-trade-volume
description: "Given a trading desk code and date range, return the aggregated daily trade volume from Snowflake."
inputParameters:
- name: desk_code
in: body
type: string
description: "The HSBC trading desk code."
- name: start_date
in: body
type: string
description: "Start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "End date in YYYY-MM-DD format."
call: snowflake.execute-statement
with:
statement: "SELECT trade_date, SUM(volume) as total_volume FROM trading.daily_trades WHERE desk_code = '{{desk_code}}' AND trade_date BETWEEN '{{start_date}}' AND '{{end_date}}' GROUP BY trade_date ORDER BY trade_date"
outputParameters:
- name: results
type: array
mapping: "$.data"
consumes:
- type: http
namespace: snowflake
baseUri: "https://hsbc.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
Executes a Splunk search query against HSBC security logs and returns matching events for threat investigation.
naftiko: "0.5"
info:
label: "Splunk Security Event Search"
description: "Executes a Splunk search query against HSBC security logs and returns matching events for threat investigation."
tags:
- security
- splunk
- siem
- lookup
capability:
exposes:
- type: mcp
namespace: security-search
port: 8080
tools:
- name: search-security-events
description: "Given a Splunk search query, execute the search and return matching security events."
inputParameters:
- name: search_query
in: body
type: string
description: "The Splunk search query string."
- name: time_range
in: body
type: string
description: "Time range for the search, e.g. '-24h'."
call: splunk.create-search
with:
search: "{{search_query}}"
earliest_time: "{{time_range}}"
outputParameters:
- name: results
type: array
mapping: "$.results"
- name: result_count
type: number
mapping: "$.result_count"
consumes:
- type: http
namespace: splunk
baseUri: "https://hsbc-splunk.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search-jobs
path: "/search/jobs"
operations:
- name: create-search
method: POST
Monitors SSL certificate expiry dates from ServiceNow CMDB, creates Jira renewal tasks, and alerts the infrastructure team via Teams.
naftiko: "0.5"
info:
label: "SSL Certificate Expiry Monitor"
description: "Monitors SSL certificate expiry dates from ServiceNow CMDB, creates Jira renewal tasks, and alerts the infrastructure team via Teams."
tags:
- security
- certificates
- servicenow
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: cert-ops
port: 8080
tools:
- name: check-certificate-expiry
description: "Query ServiceNow for certificates expiring within a given number of days, create Jira tasks, and notify the team."
inputParameters:
- name: days_threshold
in: body
type: number
description: "Number of days until expiry to trigger alerts."
steps:
- name: find-expiring
type: call
call: "servicenow.get-expiring-certs"
with:
days: "{{days_threshold}}"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "INFRA"
summary: "SSL cert renewal: {{find-expiring.cert_name}}"
description: "Certificate: {{find-expiring.cert_name}}. Domain: {{find-expiring.domain}}. Expires: {{find-expiring.expiry_date}}"
issuetype: "Task"
priority: "High"
- name: notify-team
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.infra_channel_id"
message: "SSL cert expiring: {{find-expiring.cert_name}} ({{find-expiring.domain}}) on {{find-expiring.expiry_date}}. Jira: {{create-task.key}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://hsbc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: certificates
path: "/table/cmdb_ci_certificate"
operations:
- name: get-expiring-certs
method: GET
- type: http
namespace: jira
baseUri: "https://hsbc.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Validates SWIFT payment messages by checking message format, screening counterparties, and logging results in ServiceNow for HSBC payments.
naftiko: "0.5"
info:
label: "SWIFT Message Validation Workflow"
description: "Validates SWIFT payment messages by checking message format, screening counterparties, and logging results in ServiceNow for HSBC payments."
tags:
- payments
- swift
- compliance
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: swift-ops
port: 8080
tools:
- name: validate-swift-message
description: "Given a SWIFT message reference, validate the message format, screen the counterparty, and log validation results."
inputParameters:
- name: message_ref
in: body
type: string
description: "The SWIFT message reference."
steps:
- name: get-message
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM payments.swift_messages WHERE reference = '{{message_ref}}'"
- name: screen-counterparty
type: call
call: "sanctions-api.screen"
with:
name: "{{get-message.counterparty_name}}"
bic: "{{get-message.counterparty_bic}}"
- name: log-validation
type: call
call: "servicenow.create-case"
with:
short_description: "SWIFT validation: {{message_ref}}"
description: "Message type: {{get-message.message_type}}. Counterparty: {{get-message.counterparty_name}}. Screening: {{screen-counterparty.status}}"
category: "payment_validation"
consumes:
- type: http
namespace: snowflake
baseUri: "https://hsbc.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: sanctions-api
baseUri: "https://sanctions-api.hsbc.com/v1"
authentication:
type: bearer
token: "$secrets.sanctions_token"
resources:
- name: screening
path: "/screen"
operations:
- name: screen
method: POST
- type: http
namespace: servicenow
baseUri: "https://hsbc.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
Syncs talent acquisition pipeline data from Workday Recruiting to Salesforce and generates a weekly hiring digest for HR leaders via Teams.
naftiko: "0.5"
info:
label: "Talent Acquisition Pipeline Sync"
description: "Syncs talent acquisition pipeline data from Workday Recruiting to Salesforce and generates a weekly hiring digest for HR leaders via Teams."
tags:
- hr
- recruiting
- workday
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: recruiting-ops
port: 8080
tools:
- name: sync-recruiting-pipeline
description: "Pull open requisitions from Workday Recruiting, sync candidate counts to Salesforce, and send a digest to HR leadership."
inputParameters:
- name: department
in: body
type: string
description: "Department to filter recruiting pipeline."
steps:
- name: get-requisitions
type: call
call: "workday.get-requisitions"
with:
department: "{{department}}"
- name: update-salesforce
type: call
call: "salesforce.update-recruiting-dashboard"
with:
department: "{{department}}"
open_reqs: "{{get-requisitions.count}}"
total_candidates: "{{get-requisitions.total_candidates}}"
- name: send-digest
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.hr_leadership_channel_id"
message: "Recruiting pipeline for {{department}}: {{get-requisitions.count}} open reqs, {{get-requisitions.total_candidates}} candidates in pipeline."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: requisitions
path: "/hsbc/recruiting/requisitions"
operations:
- name: get-requisitions
method: GET
- type: http
namespace: salesforce
baseUri: "https://hsbc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: recruiting
path: "/sobjects/Recruiting_Dashboard__c"
operations:
- name: update-recruiting-dashboard
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Creates a new Terraform Cloud workspace for an HSBC technology team, applies the standard compliance variable set, and notifies via Teams.
naftiko: "0.5"
info:
label: "Terraform Cloud Infrastructure Workspace Provisioner"
description: "Creates a new Terraform Cloud workspace for an HSBC technology team, applies the standard compliance variable set, and notifies via Teams."
tags:
- cloud
- infrastructure
- terraform
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: infra-provisioning
port: 8080
tools:
- name: provision-terraform-workspace
description: "Given a team name and environment, create a Terraform Cloud workspace for an HSBC technology team, apply the standard compliance variable set, and notify the team channel in Microsoft Teams."
inputParameters:
- name: team_name
in: body
type: string
description: "The technology team name, used as the workspace prefix."
- name: environment
in: body
type: string
description: "The target environment: dev, staging, or prod."
- name: teams_channel_id
in: body
type: string
description: "The Microsoft Teams channel ID to notify upon completion."
steps:
- name: create-workspace
type: call
call: "terraform.create-workspace"
with:
name: "{{team_name}}-{{environment}}"
organization: "hsbc"
- name: assign-varset
type: call
call: "terraform-varset.assign-variable-set"
with:
workspace_id: "{{create-workspace.workspace_id}}"
varset_id: "$secrets.terraform_compliance_varset_id"
- name: notify-team
type: call
call: "msteams-infra.post-channel-message"
with:
channel_id: "{{teams_channel_id}}"
message: "Workspace {{team_name}}-{{environment}} created in Terraform Cloud. ID: {{create-workspace.workspace_id}}"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: workspaces
path: "/organizations/hsbc/workspaces"
operations:
- name: create-workspace
method: POST
- type: http
namespace: terraform-varset
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: variable-set-workspaces
path: "/varsets/{{varset_id}}/relationships/workspaces"
inputParameters:
- name: varset_id
in: path
operations:
- name: assign-variable-set
method: POST
- type: http
namespace: msteams-infra
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves the current run status and last apply time for a Terraform Cloud workspace used in HSBC infrastructure provisioning.
naftiko: "0.5"
info:
label: "Terraform Workspace Status Lookup"
description: "Retrieves the current run status and last apply time for a Terraform Cloud workspace used in HSBC infrastructure provisioning."
tags:
- cloud
- infrastructure
- terraform
- lookup
capability:
exposes:
- type: mcp
namespace: infra-lookup
port: 8080
tools:
- name: get-workspace-status
description: "Given a Terraform Cloud workspace name, return the current run status and last apply timestamp."
inputParameters:
- name: workspace_name
in: body
type: string
description: "The Terraform Cloud workspace name."
call: terraform.get-workspace
with:
workspace_name: "{{workspace_name}}"
outputParameters:
- name: current_run_status
type: string
mapping: "$.data.attributes.current-run.status"
- name: last_apply
type: string
mapping: "$.data.attributes.latest-apply-at"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: workspaces
path: "/organizations/hsbc/workspaces/{{workspace_name}}"
inputParameters:
- name: workspace_name
in: path
operations:
- name: get-workspace
method: GET
Processes letter of credit applications by creating a Salesforce case, validating documents via AI, and notifying trade finance operations via Teams.
naftiko: "0.5"
info:
label: "Trade Finance Letter of Credit Processor"
description: "Processes letter of credit applications by creating a Salesforce case, validating documents via AI, and notifying trade finance operations via Teams."
tags:
- trade-finance
- banking
- salesforce
- anthropic
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: trade-finance
port: 8080
tools:
- name: process-letter-of-credit
description: "Given a trade finance application, validate LC documents, create a Salesforce case, and notify operations."
inputParameters:
- name: applicant_name
in: body
type: string
description: "The applicant company name."
- name: lc_amount
in: body
type: string
description: "The letter of credit amount and currency."
- name: document_text
in: body
type: string
description: "The extracted text from LC documents."
steps:
- name: validate-docs
type: call
call: "anthropic.create-message"
with:
model: "claude-sonnet-4-20250514"
message: "Validate the following letter of credit document for completeness and compliance: {{document_text}}"
- name: create-case
type: call
call: "salesforce.create-case"
with:
Subject: "LC Application: {{applicant_name}} - {{lc_amount}}"
Description: "Validation: {{validate-docs.content}}"
Priority: "High"
- name: notify-ops
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.trade_finance_channel_id"
message: "LC application: {{applicant_name}} for {{lc_amount}}. Case: {{create-case.CaseNumber}}. Validation: {{validate-docs.content}}"
consumes:
- type: http
namespace: anthropic
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: create-message
method: POST
- type: http
namespace: salesforce
baseUri: "https://hsbc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Detects trade settlement exceptions from Snowflake, creates a Jira ticket for investigation, and alerts the operations team via PagerDuty.
naftiko: "0.5"
info:
label: "Trade Settlement Exception Handler"
description: "Detects trade settlement exceptions from Snowflake, creates a Jira ticket for investigation, and alerts the operations team via PagerDuty."
tags:
- trading
- operations
- snowflake
- jira
- pagerduty
capability:
exposes:
- type: mcp
namespace: trade-ops
port: 8080
tools:
- name: handle-settlement-exception
description: "Given a trade ID with a settlement exception, pull details from Snowflake, create a Jira investigation ticket, and trigger a PagerDuty alert."
inputParameters:
- name: trade_id
in: body
type: string
description: "The trade ID with the settlement exception."
steps:
- name: get-trade-details
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT * FROM trading.settlements WHERE trade_id = '{{trade_id}}' AND status = 'EXCEPTION'"
- name: create-ticket
type: call
call: "jira.create-issue"
with:
project: "TRADEOPS"
summary: "Settlement exception for trade {{trade_id}}"
description: "Trade {{trade_id}} failed settlement. Amount: {{get-trade-details.amount}}, Counterparty: {{get-trade-details.counterparty}}"
issuetype: "Bug"
priority: "High"
- name: trigger-alert
type: call
call: "pagerduty.create-incident"
with:
title: "Trade settlement exception: {{trade_id}}"
service_id: "$secrets.trade_ops_service_id"
urgency: "high"
consumes:
- type: http
namespace: snowflake
baseUri: "https://hsbc.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: jira
baseUri: "https://hsbc.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
Aggregates daily cash positions from Snowflake across HSBC entities, generates a Power BI refresh, and sends the treasury summary to the CFO via Teams.
naftiko: "0.5"
info:
label: "Treasury Cash Position Reporting"
description: "Aggregates daily cash positions from Snowflake across HSBC entities, generates a Power BI refresh, and sends the treasury summary to the CFO via Teams."
tags:
- treasury
- finance
- snowflake
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: treasury-reporting
port: 8080
tools:
- name: generate-cash-position-report
description: "Given a reporting date, aggregate cash positions from Snowflake, trigger Power BI refresh, and notify the treasury team."
inputParameters:
- name: report_date
in: body
type: string
description: "The reporting date in YYYY-MM-DD format."
steps:
- name: get-positions
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT entity, currency, SUM(balance) as total_balance FROM treasury.cash_positions WHERE position_date = '{{report_date}}' GROUP BY entity, currency"
- name: refresh-dashboard
type: call
call: "powerbi.trigger-refresh"
with:
group_id: "$secrets.treasury_workspace_id"
dataset_id: "$secrets.cash_position_dataset_id"
- name: notify-treasury
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.treasury_channel_id"
message: "Daily cash position report for {{report_date}} is ready. Power BI dashboard refreshed. Total entities reported: {{get-positions.row_count}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://hsbc.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: refreshes
path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: group_id
in: path
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Orchestrates vendor payment approval by validating the invoice in SAP, matching against the purchase order, and creating a ServiceNow approval request.
naftiko: "0.5"
info:
label: "Vendor Payment Approval Orchestrator"
description: "Orchestrates vendor payment approval by validating the invoice in SAP, matching against the purchase order, and creating a ServiceNow approval request."
tags:
- finance
- procurement
- sap
- servicenow
- accounts-payable
capability:
exposes:
- type: mcp
namespace: ap-ops
port: 8080
tools:
- name: process-vendor-payment
description: "Given an SAP invoice number and PO number, validate the invoice, match to PO, and create a ServiceNow approval request."
inputParameters:
- name: invoice_number
in: body
type: string
description: "The SAP invoice document number."
- name: po_number
in: body
type: string
description: "The matching SAP purchase order number."
steps:
- name: get-invoice
type: call
call: "sap-erp.get-invoice"
with:
invoice_number: "{{invoice_number}}"
- name: get-po
type: call
call: "sap-erp.get-po"
with:
po_number: "{{po_number}}"
- name: create-approval
type: call
call: "servicenow.create-request"
with:
short_description: "Payment approval: Invoice {{invoice_number}} ({{get-invoice.vendor_name}})"
description: "Invoice amount: {{get-invoice.amount}} {{get-invoice.currency}}. PO amount: {{get-po.total_amount}}. Variance: {{get-invoice.variance_pct}}%"
category: "finance_approval"
assigned_to: "AP_Approvers"
consumes:
- type: http
namespace: sap-erp
baseUri: "https://hsbc-s4.sap.com/sap/opu/odata/sap/API_SUPPLIERINVOICE_PROCESS_SRV"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: invoices
path: "/A_SupplierInvoice('{{invoice_number}}')"
inputParameters:
- name: invoice_number
in: path
operations:
- name: get-invoice
method: GET
- name: purchase-orders
path: "/A_PurchaseOrder('{{po_number}}')"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
- type: http
namespace: servicenow
baseUri: "https://hsbc.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
Performs vendor risk assessments by pulling vendor data from SAP, screening against risk databases, and updating the Salesforce vendor risk profile.
naftiko: "0.5"
info:
label: "Vendor Risk Assessment Orchestrator"
description: "Performs vendor risk assessments by pulling vendor data from SAP, screening against risk databases, and updating the Salesforce vendor risk profile."
tags:
- procurement
- risk
- vendor-management
- sap
- salesforce
capability:
exposes:
- type: mcp
namespace: vendor-risk
port: 8080
tools:
- name: assess-vendor-risk
description: "Given a SAP vendor number, pull vendor details, run risk screening, and update the Salesforce vendor record."
inputParameters:
- name: vendor_number
in: body
type: string
description: "The SAP vendor number."
steps:
- name: get-vendor
type: call
call: "sap-erp.get-vendor"
with:
vendor_id: "{{vendor_number}}"
- name: screen-vendor
type: call
call: "risk-service.screen-vendor"
with:
vendor_name: "{{get-vendor.CompanyName}}"
country: "{{get-vendor.Country}}"
- name: update-salesforce
type: call
call: "salesforce.update-vendor"
with:
vendor_id: "{{vendor_number}}"
Risk_Rating__c: "{{screen-vendor.risk_rating}}"
Last_Assessment__c: "2026-03-27"
consumes:
- type: http
namespace: sap-erp
baseUri: "https://hsbc-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: vendors
path: "/A_Supplier('{{vendor_id}}')"
inputParameters:
- name: vendor_id
in: path
operations:
- name: get-vendor
method: GET
- type: http
namespace: risk-service
baseUri: "https://vendor-risk.hsbc.com/api/v1"
authentication:
type: bearer
token: "$secrets.vendor_risk_token"
resources:
- name: screening
path: "/screen"
operations:
- name: screen-vendor
method: POST
- type: http
namespace: salesforce
baseUri: "https://hsbc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: vendors
path: "/sobjects/Vendor__c/{{vendor_id}}"
inputParameters:
- name: vendor_id
in: path
operations:
- name: update-vendor
method: PATCH
Checks portfolio drift from Snowflake analytics, generates a rebalance recommendation, and notifies the wealth management advisor via Salesforce and Teams.
naftiko: "0.5"
info:
label: "Wealth Management Portfolio Rebalance Alert"
description: "Checks portfolio drift from Snowflake analytics, generates a rebalance recommendation, and notifies the wealth management advisor via Salesforce and Teams."
tags:
- wealth-management
- portfolio
- snowflake
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: wealth-ops
port: 8080
tools:
- name: check-portfolio-rebalance
description: "Given a portfolio ID, check drift from target allocation in Snowflake and notify the advisor if rebalancing is needed."
inputParameters:
- name: portfolio_id
in: body
type: string
description: "The wealth management portfolio ID."
steps:
- name: check-drift
type: call
call: "snowflake.execute-statement"
with:
statement: "SELECT asset_class, current_pct, target_pct, ABS(current_pct - target_pct) as drift FROM wealth.portfolio_allocation WHERE portfolio_id = '{{portfolio_id}}' AND ABS(current_pct - target_pct) > 5"
- name: update-salesforce
type: call
call: "salesforce.create-task"
with:
Subject: "Portfolio rebalance review: {{portfolio_id}}"
Description: "Drift detected: {{check-drift.results}}"
Priority: "High"
- name: notify-advisor
type: call
call: "msteams.post-channel-message"
with:
channel_id: "$secrets.wealth_channel_id"
message: "Portfolio {{portfolio_id}} has drifted beyond threshold. Salesforce task created: {{update-salesforce.id}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://hsbc.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: salesforce
baseUri: "https://hsbc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: tasks
path: "/sobjects/Task"
operations:
- name: create-task
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: post-channel-message
method: POST
Retrieves current compensation details for an HSBC employee from Workday, including base pay, currency, and pay frequency.
naftiko: "0.5"
info:
label: "Workday Compensation Lookup"
description: "Retrieves current compensation details for an HSBC employee from Workday, including base pay, currency, and pay frequency."
tags:
- hr
- compensation
- workday
- lookup
capability:
exposes:
- type: mcp
namespace: hr-compensation
port: 8080
tools:
- name: get-compensation
description: "Given a Workday worker ID, return the base salary, currency, and pay frequency."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: workday.get-compensation
with:
worker_id: "{{worker_id}}"
outputParameters:
- name: base_pay
type: string
mapping: "$.compensation.basePay"
- name: currency
type: string
mapping: "$.compensation.currency"
- name: frequency
type: string
mapping: "$.compensation.frequency"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: compensation
path: "/hsbc/workers/{{worker_id}}/compensation"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-compensation
method: GET
Retrieves an employee profile from Workday by worker ID, returning name, department, job title, and manager for HSBC HR queries.
naftiko: "0.5"
info:
label: "Workday Employee Profile Lookup"
description: "Retrieves an employee profile from Workday by worker ID, returning name, department, job title, and manager for HSBC HR queries."
tags:
- hr
- workday
- lookup
capability:
exposes:
- type: mcp
namespace: hr-lookup
port: 8080
tools:
- name: get-employee-profile
description: "Given a Workday worker ID, return the employee full name, department, job title, and manager name."
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: "$.fullName"
- name: department
type: string
mapping: "$.department"
- name: job_title
type: string
mapping: "$.jobTitle"
- name: manager
type: string
mapping: "$.manager.fullName"
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: "/hsbc/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
Exports the current global headcount by department and cost center from Workday for HSBC finance and regulatory workforce reporting.
naftiko: "0.5"
info:
label: "Workday Payroll Headcount Snapshot"
description: "Exports the current global headcount by department and cost center from Workday for HSBC finance and regulatory workforce reporting."
tags:
- hr
- finance
- reporting
- workday
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-headcount-by-department
description: "Returns current HSBC headcount grouped by department and cost center from Workday. Use for monthly headcount planning, finance reviews, or regulatory workforce disclosures."
call: "workday-hcm.get-headcount"
outputParameters:
- name: workers
type: array
mapping: "$.Report_Entry"
items:
- name: employee_id
type: string
mapping: "$.Employee_ID"
- name: full_name
type: string
mapping: "$.Full_Name"
- name: department
type: string
mapping: "$.Department"
- name: cost_center
type: string
mapping: "$.Cost_Center"
- name: employment_type
type: string
mapping: "$.Employment_Type"
consumes:
- type: http
namespace: workday-hcm
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: headcount-report
path: "/hsbc/reports/headcount_by_department"
operations:
- name: get-headcount
method: GET
Retrieves open job requisitions from Workday Recruiting across HSBC global offices and publishes a weekly status digest to the HR Confluence page.
naftiko: "0.5"
info:
label: "Workday Recruiting Pipeline Digest"
description: "Retrieves open job requisitions from Workday Recruiting across HSBC global offices and publishes a weekly status digest to the HR Confluence page."
tags:
- hr
- recruiting
- workday
- confluence
- reporting
capability:
exposes:
- type: mcp
namespace: talent-ops
port: 8080
tools:
- name: publish-recruiting-digest
description: "Retrieve all open HSBC job requisitions from Workday Recruiting, count openings by department and region, and publish a weekly summary to the HR Confluence space."
inputParameters:
- name: confluence_page_id
in: body
type: string
description: "The Confluence page ID where the recruiting digest should be published."
steps:
- name: get-open-reqs
type: call
call: "workday-recruit.list-job-requisitions"
with:
status: "Open"
- name: publish-page
type: call
call: "confluence-hr.update-page"
with:
page_id: "{{confluence_page_id}}"
content: "Open Requisitions: {{get-open-reqs.total_count}}. By Department: {{get-open-reqs.by_department}}"
consumes:
- type: http
namespace: workday-recruit
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: job-requisitions
path: "/hsbc/jobRequisitions"
inputParameters:
- name: status
in: query
operations:
- name: list-job-requisitions
method: GET
- type: http
namespace: confluence-hr
baseUri: "https://hsbc.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: pages
path: "/content/{{page_id}}"
inputParameters:
- name: page_id
in: path
operations:
- name: update-page
method: PUT
When an employee's role changes in Workday, updates their Salesforce profile, adjusts Okta group memberships, and notifies the manager via Teams.
naftiko: "0.5"
info:
label: "Workday Role Change Propagation"
description: "When an employee's role changes in Workday, updates their Salesforce profile, adjusts Okta group memberships, and notifies the manager via Teams."
tags:
- hr
- identity
- workday
- okta
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-role-change
port: 8080
tools:
- name: propagate-role-change
description: "Given a Workday employee ID and new role, update the employee's Salesforce profile, adjust Okta group memberships for the new access level, and notify their manager via Microsoft Teams."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday worker ID of the HSBC employee whose role changed."
- name: new_role
in: body
type: string
description: "The new job role or title as defined in Workday."
steps:
- name: get-employee
type: call
call: "workday-role.get-worker"
with:
worker_id: "{{employee_id}}"
- name: update-salesforce-profile
type: call
call: "salesforce-role.update-user"
with:
user_id: "{{get-employee.salesforce_user_id}}"
title: "{{new_role}}"
- name: update-okta-groups
type: call
call: "okta-role.update-user-groups"
with:
user_id: "{{get-employee.okta_user_id}}"
role: "{{new_role}}"
- name: notify-manager
type: call
call: "msteams-role.send-message"
with:
recipient: "{{get-employee.manager_email}}"
message: "{{get-employee.full_name}} has been updated to {{new_role}} in Salesforce and Okta."
consumes:
- type: http
namespace: workday-role
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/hsbc/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: salesforce-role
baseUri: "https://hsbc.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: users
path: "/sobjects/User/{{user_id}}"
inputParameters:
- name: user_id
in: path
operations:
- name: update-user
method: PATCH
- type: http
namespace: okta-role
baseUri: "https://hsbc.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_token"
placement: header
resources:
- name: user-groups
path: "/users/{{user_id}}/groups"
inputParameters:
- name: user_id
in: path
operations:
- name: update-user-groups
method: PUT
- type: http
namespace: msteams-role
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient}}/sendMail"
inputParameters:
- name: recipient
in: path
operations:
- name: send-message
method: POST
Retrieves a pending HSBC employee time-off request from Workday, checks team coverage, and approves or escalates to manager.
naftiko: "0.5"
info:
label: "Workday Time-Off Request Processing"
description: "Retrieves a pending HSBC employee time-off request from Workday, checks team coverage, and approves or escalates to manager."
tags:
- hr
- absence-management
- workday
- approval
capability:
exposes:
- type: mcp
namespace: absence-management
port: 8080
tools:
- name: process-time-off-request
description: "Given a Workday time-off request ID, retrieve request details, check team coverage schedule, and auto-approve if coverage is adequate or flag for manager review."
inputParameters:
- name: request_id
in: body
type: string
description: "The Workday absence request ID."
steps:
- name: get-request
type: call
call: "workday-absence.get-absence-request"
with:
request_id: "{{request_id}}"
- name: check-coverage
type: call
call: "workday-team.get-team-schedule"
with:
cost_center: "{{get-request.cost_center}}"
start_date: "{{get-request.start_date}}"
end_date: "{{get-request.end_date}}"
- name: approve-request
type: call
call: "workday-absence-approve.approve-absence"
with:
request_id: "{{request_id}}"
decision: "approved"
consumes:
- type: http
namespace: workday-absence
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: absence-requests
path: "/hsbc/absenceRequests/{{request_id}}"
inputParameters:
- name: request_id
in: path
operations:
- name: get-absence-request
method: GET
- type: http
namespace: workday-team
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: team-schedule
path: "/hsbc/teamSchedule"
inputParameters:
- name: cost_center
in: query
- name: start_date
in: query
- name: end_date
in: query
operations:
- name: get-team-schedule
method: GET
- type: http
namespace: workday-absence-approve
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: absence-approvals
path: "/hsbc/absenceRequests/{{request_id}}/approve"
inputParameters:
- name: request_id
in: path
operations:
- name: approve-absence
method: POST
Retrieves a Zendesk support ticket by ID and returns the subject, status, priority, and requester for HSBC customer service.
naftiko: "0.5"
info:
label: "Zendesk Ticket Lookup"
description: "Retrieves a Zendesk support ticket by ID and returns the subject, status, priority, and requester for HSBC customer service."
tags:
- support
- zendesk
- customer-service
- lookup
capability:
exposes:
- type: mcp
namespace: support-lookup
port: 8080
tools:
- name: get-ticket
description: "Given a Zendesk ticket ID, return the subject, status, priority, and requester name."
inputParameters:
- name: ticket_id
in: body
type: string
description: "The Zendesk ticket ID."
call: zendesk.get-ticket
with:
ticket_id: "{{ticket_id}}"
outputParameters:
- name: subject
type: string
mapping: "$.ticket.subject"
- name: status
type: string
mapping: "$.ticket.status"
- name: priority
type: string
mapping: "$.ticket.priority"
- name: requester
type: string
mapping: "$.ticket.requester.name"
consumes:
- type: http
namespace: zendesk
baseUri: "https://hsbc.zendesk.com/api/v2"
authentication:
type: basic
username: "$secrets.zendesk_user"
password: "$secrets.zendesk_token"
resources:
- name: tickets
path: "/tickets/{{ticket_id}}"
inputParameters:
- name: ticket_id
in: path
operations:
- name: get-ticket
method: GET
Creates a Zoom meeting for an HSBC corporate client executive briefing and sends calendar invites via Microsoft Graph to all attendees.
naftiko: "0.5"
info:
label: "Zoom Executive Briefing Scheduler"
description: "Creates a Zoom meeting for an HSBC corporate client executive briefing and sends calendar invites via Microsoft Graph to all attendees."
tags:
- sales
- communication
- zoom
- salesforce
- microsoft-365
- banking
capability:
exposes:
- type: mcp
namespace: client-engagement
port: 8080
tools:
- name: schedule-client-briefing
description: "Given a Salesforce account ID and meeting time, create a Zoom meeting for an HSBC client executive briefing and send calendar invites to all account contacts via Microsoft Graph."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account ID for the HSBC corporate client."
- name: meeting_time
in: body
type: string
description: "The meeting start time in ISO 8601 format."
- name: duration_minutes
in: body
type: integer
description: "Meeting duration in minutes."
steps:
- name: get-account
type: call
call: "salesforce-acct.get-account"
with:
account_id: "{{account_id}}"
- name: create-meeting
type: call
call: "zoom.create-meeting"
with:
topic: "HSBC Executive Briefing — {{get-account.name}}"
start_time: "{{meeting_time}}"
duration: "{{duration_minutes}}"
- name: send-invite
type: call
call: "msgraph-cal.create-event"
with:
subject: "HSBC Executive Briefing — {{get-account.name}}"
start: "{{meeting_time}}"
join_url: "{{create-meeting.join_url}}"
consumes:
- type: http
namespace: salesforce-acct
baseUri: "https://hsbc.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: zoom
baseUri: "https://api.zoom.us/v2"
authentication:
type: bearer
token: "$secrets.zoom_token"
resources:
- name: meetings
path: "/users/me/meetings"
operations:
- name: create-meeting
method: POST
- type: http
namespace: msgraph-cal
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: events
path: "/me/events"
operations:
- name: create-event
method: POST