HSBC Capabilities

Naftiko 0.5 capability definitions for HSBC - 100 capabilities showing integration workflows and service orchestrations.

Sort
Expand

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