UBS Capabilities

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

Sort
Expand

On high-value transaction detection via Mastercard, pulls client profile from Salesforce, checks against compliance watchlists, and escalates suspicious activity through ServiceNow and Microsoft Teams.

naftiko: "0.5"
info:
  label: "AML Transaction Screening Pipeline"
  description: "On high-value transaction detection via Mastercard, pulls client profile from Salesforce, checks against compliance watchlists, and escalates suspicious activity through ServiceNow and Microsoft Teams."
  tags:
    - compliance
    - aml
    - financial-crime
    - mastercard
    - salesforce
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: aml-screening
      port: 8080
      tools:
        - name: screen-transaction
          description: "Screen a high-value transaction for AML, pulling client data and escalating if suspicious."
          inputParameters:
            - name: transaction_ref
              in: body
              type: string
              description: "The Mastercard transaction reference."
            - name: client_id
              in: body
              type: string
              description: "The Salesforce client account ID."
            - name: compliance_email
              in: body
              type: string
              description: "The compliance officer email."
          steps:
            - name: get-transaction
              type: call
              call: "mastercard.get-transaction"
              with:
                transaction_ref: "{{transaction_ref}}"
            - name: get-client
              type: call
              call: "salesforce.get-account"
              with:
                client_id: "{{client_id}}"
            - name: open-sar
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "AML alert: {{get-client.Name}} — {{get-transaction.amount}} {{get-transaction.merchant_name}}"
                description: "Transaction: {{transaction_ref}}. Amount: {{get-transaction.amount}}. Merchant: {{get-transaction.merchant_name}}. Client segment: {{get-client.Client_Segment__c}}. Auth status: {{get-transaction.auth_status}}."
                assigned_group: "Financial_Crime_Unit"
                category: "aml_screening"
                priority: "1"
            - name: alert-compliance
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{compliance_email}}"
                text: "AML ALERT: Suspicious transaction for {{get-client.Name}}. Amount: {{get-transaction.amount}}. Incident: {{open-sar.number}}. Immediate review required."
  consumes:
    - type: http
      namespace: mastercard
      baseUri: "https://api.mastercard.com/fraud/v2"
      authentication:
        type: oauth1
        consumer_key: "$secrets.mastercard_consumer_key"
        signing_key: "$secrets.mastercard_signing_key"
      resources:
        - name: transactions
          path: "/transactions/{{transaction_ref}}"
          inputParameters:
            - name: transaction_ref
              in: path
          operations:
            - name: get-transaction
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://ubs.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{client_id}}"
          inputParameters:
            - name: client_id
              in: path
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://ubs.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Manages annual compliance certifications by distributing attestations, tracking completion, and filing results.

naftiko: "0.5"
info:
  label: "Annual Compliance Certification Orchestrator"
  description: "Manages annual compliance certifications by distributing attestations, tracking completion, and filing results."
  tags:
    - compliance
    - hr
    - legal
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: run-annual-compliance-certification-orchestrator
          description: "Manages annual compliance certifications by distributing attestations, tracking completion, and filing results."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Annual Compliance Certification Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Manages API lifecycle by versioning, deprecating old endpoints, notifying consumers, and updating documentation.

naftiko: "0.5"
info:
  label: "API Lifecycle Management Orchestrator"
  description: "Manages API lifecycle by versioning, deprecating old endpoints, notifying consumers, and updating documentation."
  tags:
    - engineering
    - api
    - operations
capability:
  exposes:
    - type: mcp
      namespace: engineering
      port: 8080
      tools:
        - name: run-api-lifecycle-management-orchestrator
          description: "Manages API lifecycle by versioning, deprecating old endpoints, notifying consumers, and updating documentation."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed API Lifecycle Management Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves user identity attributes from Azure Active Directory by UPN, used for access reviews and entitlement checks.

naftiko: "0.5"
info:
  label: "Azure AD User Lookup"
  description: "Retrieves user identity attributes from Azure Active Directory by UPN, used for access reviews and entitlement checks."
  tags:
    - security
    - identity
    - azure-active-directory
capability:
  exposes:
    - type: mcp
      namespace: identity
      port: 8080
      tools:
        - name: get-user-identity
          description: "Fetch Azure AD user profile by user principal name."
          inputParameters:
            - name: upn
              in: body
              type: string
              description: "The user principal name (e.g. jane.doe@ubs.com)."
          call: "azuread.get-user"
          with:
            upn: "{{upn}}"
          outputParameters:
            - name: display_name
              type: string
              mapping: "$.displayName"
            - name: job_title
              type: string
              mapping: "$.jobTitle"
            - name: department
              type: string
              mapping: "$.department"
            - name: account_enabled
              type: boolean
              mapping: "$.accountEnabled"
  consumes:
    - type: http
      namespace: azuread
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users/{{upn}}"
          inputParameters:
            - name: upn
              in: path
          operations:
            - name: get-user
              method: GET

When an Azure DevOps release pipeline requires approval, fetches the release details, validates the change request in ServiceNow, and notifies the approver via Microsoft Teams with a one-click approval link.

naftiko: "0.5"
info:
  label: "Azure DevOps Deployment Approval"
  description: "When an Azure DevOps release pipeline requires approval, fetches the release details, validates the change request in ServiceNow, and notifies the approver via Microsoft Teams with a one-click approval link."
  tags:
    - operations
    - deployment
    - azure-devops
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: release-approval
      port: 8080
      tools:
        - name: request-deployment-approval
          description: "Fetch release details, validate the change request, and send approval notification."
          inputParameters:
            - name: release_id
              in: body
              type: string
              description: "The Azure DevOps release ID."
            - name: project
              in: body
              type: string
              description: "The Azure DevOps project name."
            - name: change_request_number
              in: body
              type: string
              description: "The ServiceNow change request number."
            - name: approver_email
              in: body
              type: string
              description: "The approver email."
          steps:
            - name: get-release
              type: call
              call: "azdevops.get-release"
              with:
                project: "{{project}}"
                release_id: "{{release_id}}"
            - name: get-change-request
              type: call
              call: "servicenow.get-change"
              with:
                change_number: "{{change_request_number}}"
            - name: notify-approver
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{approver_email}}"
                text: "Deployment approval needed: {{get-release.name}} ({{project}}). CR: {{change_request_number}} — {{get-change-request.short_description}}. Status: {{get-change-request.state}}. Approve: {{get-release.approval_url}}."
  consumes:
    - type: http
      namespace: azdevops
      baseUri: "https://vsrm.dev.azure.com/ubs"
      authentication:
        type: bearer
        token: "$secrets.azdevops_token"
      resources:
        - name: releases
          path: "/{{project}}/_apis/release/releases/{{release_id}}?api-version=7.0"
          inputParameters:
            - name: project
              in: path
            - name: release_id
              in: path
          operations:
            - name: get-release
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://ubs.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: changes
          path: "/table/change_request?sysparm_query=number={{change_number}}"
          inputParameters:
            - name: change_number
              in: path
          operations:
            - name: get-change
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Checks the execution status of a trade order in Bloomberg AIM by order ID, returning fill quantity, average price, and settlement details.

naftiko: "0.5"
info:
  label: "Bloomberg AIM Order Status"
  description: "Checks the execution status of a trade order in Bloomberg AIM by order ID, returning fill quantity, average price, and settlement details."
  tags:
    - trading
    - order-management
    - bloomberg-aim
capability:
  exposes:
    - type: mcp
      namespace: trade-ops
      port: 8080
      tools:
        - name: get-order-status
          description: "Retrieve the execution status of a Bloomberg AIM order."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The Bloomberg AIM order identifier."
          call: "aim.get-order"
          with:
            order_id: "{{order_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.order.status"
            - name: filled_qty
              type: number
              mapping: "$.order.filledQuantity"
            - name: avg_price
              type: number
              mapping: "$.order.averagePrice"
            - name: settlement_date
              type: string
              mapping: "$.order.settlementDate"
  consumes:
    - type: http
      namespace: aim
      baseUri: "https://api.bloomberg.com/eap/aim/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_aim_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET

Retrieves real-time market data for a given security from Bloomberg Enterprise Data, returning price, volume, and change metrics for wealth advisors and trading desks.

naftiko: "0.5"
info:
  label: "Bloomberg Market Data Lookup"
  description: "Retrieves real-time market data for a given security from Bloomberg Enterprise Data, returning price, volume, and change metrics for wealth advisors and trading desks."
  tags:
    - trading
    - market-data
    - bloomberg-enterprise-data
capability:
  exposes:
    - type: mcp
      namespace: market-data
      port: 8080
      tools:
        - name: get-security-quote
          description: "Fetch real-time quote data for a security by Bloomberg ticker symbol."
          inputParameters:
            - name: ticker
              in: body
              type: string
              description: "Bloomberg ticker symbol (e.g. UBSG SW Equity)."
          call: "bloomberg.get-quote"
          with:
            ticker: "{{ticker}}"
          outputParameters:
            - name: last_price
              type: number
              mapping: "$.data.lastPrice"
            - name: volume
              type: number
              mapping: "$.data.volume"
            - name: change_pct
              type: number
              mapping: "$.data.changePct"
  consumes:
    - type: http
      namespace: bloomberg
      baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_token"
      resources:
        - name: quotes
          path: "/quotes/{{ticker}}"
          inputParameters:
            - name: ticker
              in: path
          operations:
            - name: get-quote
              method: GET

On client account closure in Salesforce, archives documents in SharePoint, closes open ServiceNow tickets, revokes Salesforce access, and notifies the relationship manager and compliance via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Client Offboarding Orchestrator"
  description: "On client account closure in Salesforce, archives documents in SharePoint, closes open ServiceNow tickets, revokes Salesforce access, and notifies the relationship manager and compliance via Microsoft Teams."
  tags:
    - wealth-management
    - offboarding
    - salesforce
    - sharepoint
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: client-offboarding
      port: 8080
      tools:
        - name: offboard-client
          description: "Execute full client offboarding: archive documents, close tickets, deactivate records, and notify stakeholders."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The Salesforce client account ID."
            - name: rm_email
              in: body
              type: string
              description: "The relationship manager email."
            - name: compliance_email
              in: body
              type: string
              description: "The compliance officer email."
          steps:
            - name: get-client
              type: call
              call: "salesforce.get-account"
              with:
                client_id: "{{client_id}}"
            - name: archive-docs
              type: call
              call: "sharepoint.move-folder"
              with:
                site_id: "wealth_client_docs"
                source_path: "Clients/{{get-client.Name}}_{{client_id}}"
                dest_path: "Archive/{{get-client.Name}}_{{client_id}}"
            - name: close-ticket
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Client offboarding: {{get-client.Name}}"
                description: "Account closure initiated. Documents archived to {{archive-docs.dest_url}}. All open items to be reviewed and closed."
                assigned_group: "Wealth_Operations"
                category: "client_offboarding"
            - name: notify-rm
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{rm_email}}"
                text: "Client offboarding complete: {{get-client.Name}}. Documents archived. Closure ticket: {{close-ticket.number}}."
            - name: notify-compliance
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{compliance_email}}"
                text: "Client account closed: {{get-client.Name}} ({{client_id}}). Retention archive: {{archive-docs.dest_url}}. Review ticket: {{close-ticket.number}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://ubs.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{client_id}}"
          inputParameters:
            - name: client_id
              in: path
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{source_path}}:/move"
          inputParameters:
            - name: site_id
              in: path
            - name: source_path
              in: path
          operations:
            - name: move-folder
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://ubs.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

On new wealth management client creation in Salesforce, provisions a SharePoint document vault, creates a Workday cost center assignment, opens a ServiceNow onboarding ticket, and sends a Microsoft Teams notification to the relationship manager.

naftiko: "0.5"
info:
  label: "Client Onboarding Orchestrator"
  description: "On new wealth management client creation in Salesforce, provisions a SharePoint document vault, creates a Workday cost center assignment, opens a ServiceNow onboarding ticket, and sends a Microsoft Teams notification to the relationship manager."
  tags:
    - wealth-management
    - onboarding
    - salesforce
    - sharepoint
    - workday
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: client-onboarding
      port: 8080
      tools:
        - name: onboard-wealth-client
          description: "Given a Salesforce client ID and relationship manager employee ID, orchestrate the full onboarding sequence including document provisioning, IT setup, and RM notification."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The Salesforce account ID for the new wealth client."
            - name: rm_employee_id
              in: body
              type: string
              description: "The Workday employee ID of the assigned relationship manager."
            - name: client_segment
              in: body
              type: string
              description: "The client segment (e.g. UHNW, HNW, Affluent)."
          steps:
            - name: get-client
              type: call
              call: "salesforce.get-account"
              with:
                client_id: "{{client_id}}"
            - name: get-rm
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{rm_employee_id}}"
            - name: provision-vault
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "wealth_client_docs"
                folder_path: "Clients/{{get-client.Name}}_{{client_id}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "New wealth client onboarding: {{get-client.Name}}"
                category: "client_onboarding"
                assigned_group: "Wealth_Operations"
                description: "Client: {{get-client.Name}} ({{client_segment}}). RM: {{get-rm.full_name}}. Document vault: {{provision-vault.url}}."
            - name: notify-rm
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-rm.work_email}}"
                text: "New client onboarding initiated: {{get-client.Name}} ({{client_segment}}). Ticket: {{open-ticket.number}}. Docs: {{provision-vault.url}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://ubs.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{client_id}}"
          inputParameters:
            - name: client_id
              in: path
          operations:
            - name: get-account
              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: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://ubs.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves the risk profile for a client.

naftiko: "0.5"
info:
  label: "Client Risk Profile Lookup"
  description: "Retrieves the risk profile for a client."
  tags:
    - risk
    - wealth-management
capability:
  exposes:
    - type: mcp
      namespace: risk
      port: 8080
      tools:
        - name: get-client
          description: "Retrieves the risk profile for a client."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The client risk profile lookup identifier."
          call: "risk-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: risk-api
      baseUri: "https://api.ubs.com/risk/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: client
          path: "/client/risk/profile/lookup/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-client
              method: GET

Performs a suitability check for a proposed investment by pulling client risk profile from Salesforce, product risk data from FactSet, and regulatory constraints, then creates a compliance record in ServiceNow.

naftiko: "0.5"
info:
  label: "Client Suitability Assessment"
  description: "Performs a suitability check for a proposed investment by pulling client risk profile from Salesforce, product risk data from FactSet, and regulatory constraints, then creates a compliance record in ServiceNow."
  tags:
    - compliance
    - suitability
    - salesforce
    - factset
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: suitability
      port: 8080
      tools:
        - name: assess-suitability
          description: "Check if a proposed investment is suitable for a client based on risk profile and product characteristics."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The Salesforce client account ID."
            - name: product_id
              in: body
              type: string
              description: "The FactSet product identifier."
            - name: investment_amount
              in: body
              type: number
              description: "The proposed investment amount."
          steps:
            - name: get-client
              type: call
              call: "salesforce.get-account"
              with:
                client_id: "{{client_id}}"
            - name: get-product-risk
              type: call
              call: "factset.get-product-risk"
              with:
                product_id: "{{product_id}}"
            - name: log-assessment
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Suitability assessment: {{get-client.Name}} — {{product_id}}"
                description: "Client risk profile: {{get-client.Risk_Profile__c}}. Product risk rating: {{get-product-risk.risk_rating}}. Amount: {{investment_amount}}. Client segment: {{get-client.Client_Segment__c}}."
                assigned_group: "Compliance_Suitability"
                category: "suitability_review"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://ubs.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{client_id}}"
          inputParameters:
            - name: client_id
              in: path
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: factset
      baseUri: "https://api.factset.com/analytics/v3"
      authentication:
        type: basic
        username: "$secrets.factset_user"
        password: "$secrets.factset_api_key"
      resources:
        - name: product-risk
          path: "/products/{{product_id}}/risk"
          inputParameters:
            - name: product_id
              in: path
          operations:
            - name: get-product-risk
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://ubs.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST

Checks compliance status for a transaction.

naftiko: "0.5"
info:
  label: "Compliance Check Status"
  description: "Checks compliance status for a transaction."
  tags:
    - compliance
    - risk
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: get-compliance
          description: "Checks compliance status for a transaction."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The compliance check status identifier."
          call: "compliance-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: compliance-api
      baseUri: "https://api.ubs.com/compliance/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: compliance
          path: "/compliance/check/status/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-compliance
              method: GET

On new compliance regulation release, identifies affected employees from Workday, enrolls them in Pluralsight training courses, tracks completion in ServiceNow, and notifies managers via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Compliance Training Enrollment Pipeline"
  description: "On new compliance regulation release, identifies affected employees from Workday, enrolls them in Pluralsight training courses, tracks completion in ServiceNow, and notifies managers via Microsoft Teams."
  tags:
    - compliance
    - training
    - workday
    - pluralsight
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: compliance-training
      port: 8080
      tools:
        - name: enroll-compliance-training
          description: "Enroll employees in mandatory compliance training, create a tracking task, and notify the department manager."
          inputParameters:
            - name: department
              in: body
              type: string
              description: "The department code for affected employees."
            - name: course_id
              in: body
              type: string
              description: "The Pluralsight course identifier."
            - name: regulation_name
              in: body
              type: string
              description: "Name of the compliance regulation."
            - name: manager_email
              in: body
              type: string
              description: "The department manager email."
          steps:
            - name: get-employees
              type: call
              call: "workday.get-department-workers"
              with:
                department: "{{department}}"
            - name: enroll-course
              type: call
              call: "pluralsight.enroll-users"
              with:
                course_id: "{{course_id}}"
                user_emails: "{{get-employees.email_list}}"
            - name: create-tracker
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Compliance training: {{regulation_name}} — {{department}}"
                description: "Enrolled {{get-employees.count}} employees in Pluralsight course {{course_id}}. Regulation: {{regulation_name}}. Deadline: 30 days."
                assigned_group: "Compliance_Training"
                category: "mandatory_training"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{manager_email}}"
                text: "Compliance training assigned: {{regulation_name}}. {{get-employees.count}} team members enrolled in course {{course_id}}. Tracker: {{create-tracker.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: department-workers
          path: "/workers?department={{department}}"
          inputParameters:
            - name: department
              in: query
          operations:
            - name: get-department-workers
              method: GET
    - type: http
      namespace: pluralsight
      baseUri: "https://api.pluralsight.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pluralsight_token"
      resources:
        - name: enrollments
          path: "/courses/{{course_id}}/enrollments"
          inputParameters:
            - name: course_id
              in: path
          operations:
            - name: enroll-users
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://ubs.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Searches UBS Confluence for a knowledge article by keyword, returning page title, URL, and excerpt for internal support workflows.

naftiko: "0.5"
info:
  label: "Confluence Knowledge Article Retrieval"
  description: "Searches UBS Confluence for a knowledge article by keyword, returning page title, URL, and excerpt for internal support workflows."
  tags:
    - knowledge-management
    - support
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: knowledge
      port: 8080
      tools:
        - name: search-articles
          description: "Search Confluence for knowledge articles matching a query string."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "The search query for Confluence."
          call: "confluence.search"
          with:
            query: "{{query}}"
          outputParameters:
            - name: results
              type: array
              mapping: "$.results"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://ubs.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: search
          path: "/search?cql=text~\"{{query}}\""
          inputParameters:
            - name: query
              in: query
          operations:
            - name: search
              method: GET

Retrieves a Confluence wiki page.

naftiko: "0.5"
info:
  label: "Confluence Page Viewer"
  description: "Retrieves a Confluence wiki page."
  tags:
    - collaboration
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: collaboration
      port: 8080
      tools:
        - name: get-confluence
          description: "Retrieves a Confluence wiki page."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The confluence page viewer identifier."
          call: "collaboration-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: collaboration-api
      baseUri: "https://api.ubs.com/collaboration/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: confluence
          path: "/confluence/page/viewer/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-confluence
              method: GET

Before processing a cross-border payment, validates the beneficiary against Mastercard fraud screening, checks sanctions via Salesforce compliance records, converts currency via Bloomberg FX, and logs the approval in ServiceNow.

naftiko: "0.5"
info:
  label: "Cross-Border Payment Compliance Check"
  description: "Before processing a cross-border payment, validates the beneficiary against Mastercard fraud screening, checks sanctions via Salesforce compliance records, converts currency via Bloomberg FX, and logs the approval in ServiceNow."
  tags:
    - payments
    - compliance
    - cross-border
    - mastercard
    - salesforce
    - bloomberg-enterprise-data
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: cross-border-payments
      port: 8080
      tools:
        - name: validate-cross-border-payment
          description: "Validate a cross-border payment against fraud, sanctions, and FX requirements before processing."
          inputParameters:
            - name: beneficiary_id
              in: body
              type: string
              description: "The beneficiary client ID in Salesforce."
            - name: amount
              in: body
              type: number
              description: "The payment amount in source currency."
            - name: source_currency
              in: body
              type: string
              description: "The source currency code."
            - name: target_currency
              in: body
              type: string
              description: "The target currency code."
            - name: transaction_ref
              in: body
              type: string
              description: "The payment transaction reference."
          steps:
            - name: get-beneficiary
              type: call
              call: "salesforce.get-account"
              with:
                client_id: "{{beneficiary_id}}"
            - name: screen-fraud
              type: call
              call: "mastercard.screen-payment"
              with:
                transaction_ref: "{{transaction_ref}}"
                amount: "{{amount}}"
            - name: get-fx-rate
              type: call
              call: "bloomberg.get-fx-rate"
              with:
                currency_pair: "{{source_currency}}{{target_currency}}"
            - name: log-approval
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Cross-border payment: {{get-beneficiary.Name}} {{amount}} {{source_currency}}"
                description: "Beneficiary: {{get-beneficiary.Name}}. Amount: {{amount}} {{source_currency}} -> {{target_currency}} at rate {{get-fx-rate.rate}}. Fraud screen: {{screen-fraud.result}}. Ref: {{transaction_ref}}."
                assigned_group: "Payment_Operations"
                category: "cross_border_payment"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://ubs.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{client_id}}"
          inputParameters:
            - name: client_id
              in: path
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: mastercard
      baseUri: "https://api.mastercard.com/fraud/v2"
      authentication:
        type: oauth1
        consumer_key: "$secrets.mastercard_consumer_key"
        signing_key: "$secrets.mastercard_signing_key"
      resources:
        - name: screening
          path: "/screening"
          operations:
            - name: screen-payment
              method: POST
    - 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/{{currency_pair}}"
          inputParameters:
            - name: currency_pair
              in: path
          operations:
            - name: get-fx-rate
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://ubs.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST

Kicks off cross-functional projects by creating workspaces, scheduling meetings, and distributing project charters.

naftiko: "0.5"
info:
  label: "Cross-Functional Project Kickoff Orchestrator"
  description: "Kicks off cross-functional projects by creating workspaces, scheduling meetings, and distributing project charters."
  tags:
    - project-management
    - collaboration
    - operations
capability:
  exposes:
    - type: mcp
      namespace: project-management
      port: 8080
      tools:
        - name: run-cross-functional-project-kickoff-orchestrator
          description: "Kicks off cross-functional projects by creating workspaces, scheduling meetings, and distributing project charters."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Cross-Functional Project Kickoff Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Handles customer data privacy requests by locating records, processing deletions, and confirming compliance.

naftiko: "0.5"
info:
  label: "Customer Data Privacy Request Handler"
  description: "Handles customer data privacy requests by locating records, processing deletions, and confirming compliance."
  tags:
    - compliance
    - privacy
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: run-customer-data-privacy-request-handler
          description: "Handles customer data privacy requests by locating records, processing deletions, and confirming compliance."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Customer Data Privacy Request Handler for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Maps customer journeys by aggregating touchpoint data, identifying friction points, and generating improvement recommendations.

naftiko: "0.5"
info:
  label: "Customer Journey Mapping Orchestrator"
  description: "Maps customer journeys by aggregating touchpoint data, identifying friction points, and generating improvement recommendations."
  tags:
    - customer-experience
    - analytics
    - product-management
capability:
  exposes:
    - type: mcp
      namespace: customer-experience
      port: 8080
      tools:
        - name: run-customer-journey-mapping-orchestrator
          description: "Maps customer journeys by aggregating touchpoint data, identifying friction points, and generating improvement recommendations."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Customer Journey Mapping Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Reviews data governance compliance by auditing access controls, classifying data, and generating compliance reports.

naftiko: "0.5"
info:
  label: "Data Governance Review Orchestrator"
  description: "Reviews data governance compliance by auditing access controls, classifying data, and generating compliance reports."
  tags:
    - data-governance
    - compliance
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: data-governance
      port: 8080
      tools:
        - name: run-data-governance-review-orchestrator
          description: "Reviews data governance compliance by auditing access controls, classifying data, and generating compliance reports."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Data Governance Review Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Queries Datadog for the health status of a specific host or service, returning uptime, CPU, and alert status for UBS platform engineering.

naftiko: "0.5"
info:
  label: "Datadog Infrastructure Health Check"
  description: "Queries Datadog for the health status of a specific host or service, returning uptime, CPU, and alert status for UBS platform engineering."
  tags:
    - operations
    - monitoring
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: infra-monitoring
      port: 8080
      tools:
        - name: get-host-health
          description: "Retrieve Datadog health metrics for a host by hostname."
          inputParameters:
            - name: hostname
              in: body
              type: string
              description: "The hostname to query in Datadog."
          call: "datadog.get-host"
          with:
            hostname: "{{hostname}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.host_list[0].up"
            - name: cpu_pct
              type: number
              mapping: "$.host_list[0].metrics.cpu"
            - name: alerts
              type: number
              mapping: "$.host_list[0].alerts_count"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        name: "DD-API-KEY"
        in: header
        value: "$secrets.datadog_api_key"
      resources:
        - name: hosts
          path: "/hosts?filter={{hostname}}"
          inputParameters:
            - name: hostname
              in: query
          operations:
            - name: get-host
              method: GET

Manages derivatives collateral by pulling margin requirements from Bloomberg AIM, verifying collateral positions in FactSet, updating Salesforce records, and alerting the middle office via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Derivatives Collateral Management"
  description: "Manages derivatives collateral by pulling margin requirements from Bloomberg AIM, verifying collateral positions in FactSet, updating Salesforce records, and alerting the middle office via Microsoft Teams."
  tags:
    - trading
    - derivatives
    - collateral-management
    - bloomberg-aim
    - factset
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: collateral-mgmt
      port: 8080
      tools:
        - name: manage-collateral
          description: "Check margin requirements, verify collateral adequacy, update records, and notify the middle office."
          inputParameters:
            - name: portfolio_id
              in: body
              type: string
              description: "The portfolio identifier."
            - name: counterparty_id
              in: body
              type: string
              description: "The Salesforce counterparty account ID."
            - name: middle_office_email
              in: body
              type: string
              description: "The middle office team email."
          steps:
            - name: get-margin-req
              type: call
              call: "aim.get-margin-requirement"
              with:
                portfolio_id: "{{portfolio_id}}"
            - name: get-collateral
              type: call
              call: "factset.get-collateral-positions"
              with:
                portfolio_id: "{{portfolio_id}}"
            - name: update-counterparty
              type: call
              call: "salesforce.update-account"
              with:
                client_id: "{{counterparty_id}}"
                margin_status: "{{get-margin-req.status}}"
                collateral_value: "{{get-collateral.total_value}}"
            - name: notify-middle-office
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{middle_office_email}}"
                text: "Collateral update: Portfolio {{portfolio_id}}. Margin required: {{get-margin-req.amount}}. Collateral posted: {{get-collateral.total_value}}. Status: {{get-margin-req.status}}."
  consumes:
    - type: http
      namespace: aim
      baseUri: "https://api.bloomberg.com/eap/aim/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_aim_token"
      resources:
        - name: margin
          path: "/portfolios/{{portfolio_id}}/margin"
          inputParameters:
            - name: portfolio_id
              in: path
          operations:
            - name: get-margin-requirement
              method: GET
    - type: http
      namespace: factset
      baseUri: "https://api.factset.com/analytics/v3"
      authentication:
        type: basic
        username: "$secrets.factset_user"
        password: "$secrets.factset_api_key"
      resources:
        - name: collateral
          path: "/portfolios/{{portfolio_id}}/collateral"
          inputParameters:
            - name: portfolio_id
              in: path
          operations:
            - name: get-collateral-positions
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://ubs.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{client_id}}"
          inputParameters:
            - name: client_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: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Tracks digital transformation progress by aggregating initiative metrics, reporting milestones, and alerting on risks.

naftiko: "0.5"
info:
  label: "Digital Transformation Progress Orchestrator"
  description: "Tracks digital transformation progress by aggregating initiative metrics, reporting milestones, and alerting on risks."
  tags:
    - strategy
    - analytics
    - project-management
capability:
  exposes:
    - type: mcp
      namespace: strategy
      port: 8080
      tools:
        - name: run-digital-transformation-progress-orchestrator
          description: "Tracks digital transformation progress by aggregating initiative metrics, reporting milestones, and alerting on risks."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Digital Transformation Progress Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Executes disaster recovery tests by failing over systems, validating recovery, and documenting results.

naftiko: "0.5"
info:
  label: "Disaster Recovery Test Orchestrator"
  description: "Executes disaster recovery tests by failing over systems, validating recovery, and documenting results."
  tags:
    - infrastructure
    - operations
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: infrastructure
      port: 8080
      tools:
        - name: run-disaster-recovery-test-orchestrator
          description: "Executes disaster recovery tests by failing over systems, validating recovery, and documenting results."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Disaster Recovery Test Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves employee details from Workday, pulls Azure AD entitlements, compares against role-based access policies, and opens a ServiceNow remediation ticket if discrepancies are found.

naftiko: "0.5"
info:
  label: "Employee Access Review Orchestrator"
  description: "Retrieves employee details from Workday, pulls Azure AD entitlements, compares against role-based access policies, and opens a ServiceNow remediation ticket if discrepancies are found."
  tags:
    - security
    - access-review
    - workday
    - azure-active-directory
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: access-review
      port: 8080
      tools:
        - name: run-access-review
          description: "Given an employee ID, pull HR data and AD entitlements, and create a remediation ticket if access drift is detected."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID."
            - name: upn
              in: body
              type: string
              description: "The Azure AD user principal name."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{worker_id}}"
            - name: get-ad-user
              type: call
              call: "azuread.get-user"
              with:
                upn: "{{upn}}"
            - name: get-ad-groups
              type: call
              call: "azuread.get-user-groups"
              with:
                upn: "{{upn}}"
            - name: open-remediation
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Access review drift: {{get-employee.full_name}}"
                description: "Employee: {{get-employee.full_name}} ({{get-employee.department}}). AD groups: {{get-ad-groups.group_count}}. Review required for role alignment."
                assigned_group: "IAM_Operations"
                category: "access_review"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: azuread
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users/{{upn}}"
          inputParameters:
            - name: upn
              in: path
          operations:
            - name: get-user
              method: GET
        - name: user-groups
          path: "/users/{{upn}}/memberOf"
          inputParameters:
            - name: upn
              in: path
          operations:
            - name: get-user-groups
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://ubs.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

Processes employee offboarding by revoking access, returning equipment, and conducting exit interviews.

naftiko: "0.5"
info:
  label: "Employee Offboarding Orchestrator"
  description: "Processes employee offboarding by revoking access, returning equipment, and conducting exit interviews."
  tags:
    - hr
    - identity
    - operations
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: run-employee-offboarding-orchestrator
          description: "Processes employee offboarding by revoking access, returning equipment, and conducting exit interviews."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Employee Offboarding Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

On employee termination in Workday, disables the Azure AD account, creates a ServiceNow deprovisioning ticket, archives the employee SharePoint folder, and notifies HR and IT via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Employee Termination Access Revocation"
  description: "On employee termination in Workday, disables the Azure AD account, creates a ServiceNow deprovisioning ticket, archives the employee SharePoint folder, and notifies HR and IT via Microsoft Teams."
  tags:
    - security
    - offboarding
    - workday
    - azure-active-directory
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: employee-offboarding
      port: 8080
      tools:
        - name: revoke-terminated-access
          description: "Disable identity, deprovision systems, archive documents, and notify stakeholders on employee termination."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID."
            - name: upn
              in: body
              type: string
              description: "The Azure AD user principal name."
            - name: hr_email
              in: body
              type: string
              description: "The HR representative email."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{worker_id}}"
            - name: disable-account
              type: call
              call: "azuread.disable-user"
              with:
                upn: "{{upn}}"
            - name: archive-docs
              type: call
              call: "sharepoint.move-folder"
              with:
                site_id: "employee_docs"
                source_path: "Active/{{get-employee.full_name}}"
                dest_path: "Terminated/{{get-employee.full_name}}"
            - name: open-deprov-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Access revocation: {{get-employee.full_name}}"
                description: "Terminated employee: {{get-employee.full_name}} ({{get-employee.department}}). AD account disabled. Documents archived. Complete application deprovisioning."
                assigned_group: "IAM_Operations"
                category: "employee_termination"
            - name: notify-hr
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{hr_email}}"
                text: "Access revocation complete: {{get-employee.full_name}}. AD disabled, docs archived. Deprovisioning ticket: {{open-deprov-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: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: azuread
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users/{{upn}}"
          inputParameters:
            - name: upn
              in: path
          operations:
            - name: disable-user
              method: PATCH
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{source_path}}:/move"
          inputParameters:
            - name: site_id
              in: path
            - name: source_path
              in: path
          operations:
            - name: move-folder
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://ubs.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

When new Bloomberg Intelligence research is published, extracts key findings, updates the corresponding Salesforce opportunity, uploads the report to SharePoint, and notifies relevant advisors via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Equity Research Distribution"
  description: "When new Bloomberg Intelligence research is published, extracts key findings, updates the corresponding Salesforce opportunity, uploads the report to SharePoint, and notifies relevant advisors via Microsoft Teams."
  tags:
    - research
    - distribution
    - bloomberg-intelligence
    - salesforce
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: research-distribution
      port: 8080
      tools:
        - name: distribute-research
          description: "Distribute a Bloomberg Intelligence research note to advisors, updating CRM and document storage."
          inputParameters:
            - name: research_id
              in: body
              type: string
              description: "The Bloomberg Intelligence research note ID."
            - name: ticker
              in: body
              type: string
              description: "The relevant security ticker."
            - name: advisor_emails
              in: body
              type: string
              description: "Comma-separated list of advisor emails to notify."
          steps:
            - name: get-research
              type: call
              call: "bloomberg.get-intelligence-note"
              with:
                research_id: "{{research_id}}"
            - name: upload-report
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "research_library"
                file_path: "EquityResearch/{{ticker}}/{{research_id}}.pdf"
                content: "{{get-research.content}}"
            - name: notify-advisors
              type: call
              call: "msteams.send-channel-message"
              with:
                channel_id: "equity_research"
                text: "New research: {{get-research.title}} ({{ticker}}). Rating: {{get-research.rating}}. Target: {{get-research.target_price}}. Report: {{upload-report.url}}."
  consumes:
    - type: http
      namespace: bloomberg
      baseUri: "https://api.bloomberg.com/eap/intelligence/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_token"
      resources:
        - name: notes
          path: "/notes/{{research_id}}"
          inputParameters:
            - name: research_id
              in: path
          operations:
            - name: get-intelligence-note
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Refreshes executive dashboards by pulling data from multiple sources, transforming metrics, and updating Power BI.

naftiko: "0.5"
info:
  label: "Executive Dashboard Refresh Orchestrator"
  description: "Refreshes executive dashboards by pulling data from multiple sources, transforming metrics, and updating Power BI."
  tags:
    - analytics
    - power-bi
    - business
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: run-executive-dashboard-refresh-orchestrator
          description: "Refreshes executive dashboards by pulling data from multiple sources, transforming metrics, and updating Power BI."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Executive Dashboard Refresh Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves the current holdings of a managed portfolio from FactSet, returning positions, weights, and asset class breakdown for portfolio managers.

naftiko: "0.5"
info:
  label: "FactSet Portfolio Holdings"
  description: "Retrieves the current holdings of a managed portfolio from FactSet, returning positions, weights, and asset class breakdown for portfolio managers."
  tags:
    - wealth-management
    - portfolio
    - factset
capability:
  exposes:
    - type: mcp
      namespace: portfolio-data
      port: 8080
      tools:
        - name: get-portfolio-holdings
          description: "Fetch current holdings for a portfolio by FactSet portfolio ID."
          inputParameters:
            - name: portfolio_id
              in: body
              type: string
              description: "The FactSet portfolio identifier."
          call: "factset.get-holdings"
          with:
            portfolio_id: "{{portfolio_id}}"
          outputParameters:
            - name: holdings
              type: array
              mapping: "$.data.holdings"
            - name: total_market_value
              type: number
              mapping: "$.data.totalMarketValue"
            - name: currency
              type: string
              mapping: "$.data.currency"
  consumes:
    - type: http
      namespace: factset
      baseUri: "https://api.factset.com/analytics/v3"
      authentication:
        type: basic
        username: "$secrets.factset_user"
        password: "$secrets.factset_api_key"
      resources:
        - name: portfolios
          path: "/portfolios/{{portfolio_id}}/holdings"
          inputParameters:
            - name: portfolio_id
              in: path
          operations:
            - name: get-holdings
              method: GET

Orchestrates finance workflow 1 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Finance Workflow 1"
  description: "Orchestrates finance workflow 1 by coordinating across systems, validating data, and sending notifications."
  tags:
    - finance
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: run-finance-workflow-001
          description: "Orchestrates finance workflow 1 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Finance Workflow 1 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates finance workflow 2 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Finance Workflow 2"
  description: "Orchestrates finance workflow 2 by coordinating across systems, validating data, and sending notifications."
  tags:
    - finance
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: run-finance-workflow-002
          description: "Orchestrates finance workflow 2 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Finance Workflow 2 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves finance operational data for workflow 3.

naftiko: "0.5"
info:
  label: "Finance Data Query 3"
  description: "Retrieves finance operational data for workflow 3."
  tags:
    - finance
    - operations
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: get-data-3
          description: "Query finance data for workflow 3."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "finance-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: finance-api
      baseUri: "https://api.ubs.com/finance/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-3
              method: GET

Orchestrates finance workflow 4 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Finance Workflow 4"
  description: "Orchestrates finance workflow 4 by coordinating across systems, validating data, and sending notifications."
  tags:
    - finance
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: run-finance-workflow-004
          description: "Orchestrates finance workflow 4 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Finance Workflow 4 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates finance workflow 5 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Finance Workflow 5"
  description: "Orchestrates finance workflow 5 by coordinating across systems, validating data, and sending notifications."
  tags:
    - finance
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: run-finance-workflow-005
          description: "Orchestrates finance workflow 5 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Finance Workflow 5 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves finance operational data for workflow 6.

naftiko: "0.5"
info:
  label: "Finance Data Query 6"
  description: "Retrieves finance operational data for workflow 6."
  tags:
    - finance
    - operations
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: get-data-6
          description: "Query finance data for workflow 6."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "finance-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: finance-api
      baseUri: "https://api.ubs.com/finance/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-6
              method: GET

Orchestrates finance workflow 7 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Finance Workflow 7"
  description: "Orchestrates finance workflow 7 by coordinating across systems, validating data, and sending notifications."
  tags:
    - finance
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: run-finance-workflow-007
          description: "Orchestrates finance workflow 7 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Finance Workflow 7 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates finance workflow 8 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Finance Workflow 8"
  description: "Orchestrates finance workflow 8 by coordinating across systems, validating data, and sending notifications."
  tags:
    - finance
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: run-finance-workflow-008
          description: "Orchestrates finance workflow 8 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Finance Workflow 8 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves finance operational data for workflow 9.

naftiko: "0.5"
info:
  label: "Finance Data Query 9"
  description: "Retrieves finance operational data for workflow 9."
  tags:
    - finance
    - operations
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: get-data-9
          description: "Query finance data for workflow 9."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "finance-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: finance-api
      baseUri: "https://api.ubs.com/finance/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-9
              method: GET

Orchestrates finance workflow 10 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Finance Workflow 10"
  description: "Orchestrates finance workflow 10 by coordinating across systems, validating data, and sending notifications."
  tags:
    - finance
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: run-finance-workflow-010
          description: "Orchestrates finance workflow 10 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Finance Workflow 10 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates finance workflow 11 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Finance Workflow 11"
  description: "Orchestrates finance workflow 11 by coordinating across systems, validating data, and sending notifications."
  tags:
    - finance
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: run-finance-workflow-011
          description: "Orchestrates finance workflow 11 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Finance Workflow 11 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves finance operational data for workflow 12.

naftiko: "0.5"
info:
  label: "Finance Data Query 12"
  description: "Retrieves finance operational data for workflow 12."
  tags:
    - finance
    - operations
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: get-data-12
          description: "Query finance data for workflow 12."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "finance-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: finance-api
      baseUri: "https://api.ubs.com/finance/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-12
              method: GET

Orchestrates finance workflow 13 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Finance Workflow 13"
  description: "Orchestrates finance workflow 13 by coordinating across systems, validating data, and sending notifications."
  tags:
    - finance
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: run-finance-workflow-013
          description: "Orchestrates finance workflow 13 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Finance Workflow 13 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Orchestrates finance workflow 14 by coordinating across systems, validating data, and sending notifications.

naftiko: "0.5"
info:
  label: "Finance Workflow 14"
  description: "Orchestrates finance workflow 14 by coordinating across systems, validating data, and sending notifications."
  tags:
    - finance
    - operations
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: run-finance-workflow-014
          description: "Orchestrates finance workflow 14 by coordinating across systems, validating data, and sending notifications."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Finance Workflow 14 for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves finance operational data for workflow 15.

naftiko: "0.5"
info:
  label: "Finance Data Query 15"
  description: "Retrieves finance operational data for workflow 15."
  tags:
    - finance
    - operations
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: get-data-15
          description: "Query finance data for workflow 15."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The entity identifier."
          call: "finance-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: finance-api
      baseUri: "https://api.ubs.com/finance/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: data
          path: "/data/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-data-15
              method: GET

Computes regulatory capital ratios by extracting risk-weighted assets from SAP, market risk figures from Bloomberg, and operational risk data from ServiceNow, then publishes results to SharePoint and notifies the CFO office.

naftiko: "0.5"
info:
  label: "FINMA Regulatory Capital Calculation"
  description: "Computes regulatory capital ratios by extracting risk-weighted assets from SAP, market risk figures from Bloomberg, and operational risk data from ServiceNow, then publishes results to SharePoint and notifies the CFO office."
  tags:
    - compliance
    - regulatory-capital
    - finma
    - sap
    - bloomberg-enterprise-data
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: regulatory-capital
      port: 8080
      tools:
        - name: calculate-capital-ratios
          description: "Compute CET1, Tier 1, and total capital ratios from risk data across SAP, Bloomberg, and ServiceNow."
          inputParameters:
            - name: company_code
              in: body
              type: string
              description: "The SAP company code."
            - name: reporting_date
              in: body
              type: string
              description: "The reporting date (YYYY-MM-DD)."
            - name: cfo_email
              in: body
              type: string
              description: "The CFO office email for notification."
          steps:
            - name: get-rwa
              type: call
              call: "sap.get-rwa"
              with:
                company_code: "{{company_code}}"
                date: "{{reporting_date}}"
            - name: get-market-risk
              type: call
              call: "bloomberg.get-var"
              with:
                entity: "UBS"
                date: "{{reporting_date}}"
            - name: get-op-risk
              type: call
              call: "servicenow.get-risk-events"
              with:
                company_code: "{{company_code}}"
                period: "{{reporting_date}}"
            - name: publish-report
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "regulatory_capital"
                file_path: "Reports/{{company_code}}_{{reporting_date}}_capital.json"
                content: "{\"rwa\": \"{{get-rwa.total_rwa}}\", \"market_var\": \"{{get-market-risk.var_99}}\", \"op_risk_events\": \"{{get-op-risk.event_count}}\", \"date\": \"{{reporting_date}}\"}"
            - name: notify-cfo
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{cfo_email}}"
                text: "Regulatory capital report ready: {{company_code}} as of {{reporting_date}}. RWA: {{get-rwa.total_rwa}}. Market VaR: {{get-market-risk.var_99}}. Report: {{publish-report.url}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ubs-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRYITEMBASIC_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      inputParameters:
        - name: Accept
          in: header
          value: "application/json"
      resources:
        - name: rwa
          path: "/RiskWeightedAssets?$filter=CompanyCode eq '{{company_code}}' and ReportingDate eq '{{date}}'"
          inputParameters:
            - name: company_code
              in: query
            - name: date
              in: query
          operations:
            - name: get-rwa
              method: GET
    - type: http
      namespace: bloomberg
      baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_token"
      resources:
        - name: risk
          path: "/risk/var?entity={{entity}}&date={{date}}"
          inputParameters:
            - name: entity
              in: query
            - name: date
              in: query
          operations:
            - name: get-var
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://ubs.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: risk-events
          path: "/table/risk_event?sysparm_query=company_code={{company_code}}^period={{period}}"
          inputParameters:
            - name: company_code
              in: query
            - name: period
              in: query
          operations:
            - name: get-risk-events
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Monitors bond trade settlement by checking Bloomberg AIM order status, verifying Tradeweb execution details, and notifying the operations team via Microsoft Teams when settlement is confirmed or fails.

naftiko: "0.5"
info:
  label: "Fixed Income Trade Settlement Tracker"
  description: "Monitors bond trade settlement by checking Bloomberg AIM order status, verifying Tradeweb execution details, and notifying the operations team via Microsoft Teams when settlement is confirmed or fails."
  tags:
    - trading
    - settlement
    - fixed-income
    - bloomberg-aim
    - tradeweb
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: settlement-ops
      port: 8080
      tools:
        - name: track-bond-settlement
          description: "Track settlement status for a fixed income trade across Bloomberg AIM and Tradeweb, notifying ops on completion."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The Bloomberg AIM order identifier."
            - name: isin
              in: body
              type: string
              description: "The bond ISIN."
            - name: ops_team_email
              in: body
              type: string
              description: "Email of the operations team member to notify."
          steps:
            - name: get-aim-status
              type: call
              call: "aim.get-order"
              with:
                order_id: "{{order_id}}"
            - name: get-tradeweb-execution
              type: call
              call: "tradeweb.get-execution"
              with:
                isin: "{{isin}}"
                order_ref: "{{order_id}}"
            - name: notify-ops
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{ops_team_email}}"
                text: "Settlement update for {{isin}}: AIM status={{get-aim-status.status}}, settled={{get-aim-status.settlement_date}}. Tradeweb confirm: {{get-tradeweb-execution.confirmation_id}}."
  consumes:
    - type: http
      namespace: aim
      baseUri: "https://api.bloomberg.com/eap/aim/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_aim_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: tradeweb
      baseUri: "https://api.tradeweb.com/v2"
      authentication:
        type: bearer
        token: "$secrets.tradeweb_token"
      resources:
        - name: executions
          path: "/executions?isin={{isin}}&orderRef={{order_ref}}"
          inputParameters:
            - name: isin
              in: query
            - name: order_ref
              in: query
          operations:
            - name: get-execution
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves performance data for an investment fund.

naftiko: "0.5"
info:
  label: "Fund Performance Report"
  description: "Retrieves performance data for an investment fund."
  tags:
    - investments
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: investments
      port: 8080
      tools:
        - name: get-fund
          description: "Retrieves performance data for an investment fund."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The fund performance report identifier."
          call: "investments-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: investments-api
      baseUri: "https://api.ubs.com/investments/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: fund
          path: "/fund/performance/report/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-fund
              method: GET

Executes a foreign exchange spot trade by fetching live FX rates from Bloomberg, submitting the order through Bloomberg AIM, updating the client record in Salesforce, and confirming via Microsoft Teams.

naftiko: "0.5"
info:
  label: "FX Spot Trade Execution"
  description: "Executes a foreign exchange spot trade by fetching live FX rates from Bloomberg, submitting the order through Bloomberg AIM, updating the client record in Salesforce, and confirming via Microsoft Teams."
  tags:
    - trading
    - fx
    - bloomberg-enterprise-data
    - bloomberg-aim
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: fx-trading
      port: 8080
      tools:
        - name: execute-fx-spot
          description: "Execute a spot FX trade with live rates, order submission, and client notification."
          inputParameters:
            - name: currency_pair
              in: body
              type: string
              description: "The currency pair (e.g. EURCHF, USDCHF)."
            - name: amount
              in: body
              type: number
              description: "The notional amount in base currency."
            - name: side
              in: body
              type: string
              description: "BUY or SELL."
            - name: client_id
              in: body
              type: string
              description: "The Salesforce client account ID."
            - name: trader_email
              in: body
              type: string
              description: "The trader email for confirmation."
          steps:
            - name: get-fx-rate
              type: call
              call: "bloomberg.get-fx-rate"
              with:
                currency_pair: "{{currency_pair}}"
            - name: submit-order
              type: call
              call: "aim.create-fx-order"
              with:
                currency_pair: "{{currency_pair}}"
                amount: "{{amount}}"
                side: "{{side}}"
                rate: "{{get-fx-rate.rate}}"
            - name: update-client
              type: call
              call: "salesforce.create-activity"
              with:
                client_id: "{{client_id}}"
                subject: "FX {{side}} {{amount}} {{currency_pair}} at {{get-fx-rate.rate}}"
            - name: confirm-trader
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{trader_email}}"
                text: "FX trade confirmed: {{side}} {{amount}} {{currency_pair}} at {{get-fx-rate.rate}}. Order: {{submit-order.order_id}}. Settlement: {{submit-order.settlement_date}}."
  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/{{currency_pair}}"
          inputParameters:
            - name: currency_pair
              in: path
          operations:
            - name: get-fx-rate
              method: GET
    - type: http
      namespace: aim
      baseUri: "https://api.bloomberg.com/eap/aim/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_aim_token"
      resources:
        - name: fx-orders
          path: "/fx/orders"
          operations:
            - name: create-fx-order
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://ubs.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: activities
          path: "/sobjects/Task"
          operations:
            - name: create-activity
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a file from Google Drive.

naftiko: "0.5"
info:
  label: "Google Drive File Viewer"
  description: "Retrieves a file from Google Drive."
  tags:
    - collaboration
    - google-drive
capability:
  exposes:
    - type: mcp
      namespace: collaboration
      port: 8080
      tools:
        - name: get-google
          description: "Retrieves a file from Google Drive."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The google drive file viewer identifier."
          call: "collaboration-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: collaboration-api
      baseUri: "https://api.ubs.com/collaboration/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: google
          path: "/google/drive/file/viewer/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-google
              method: GET

When a critical ServiceNow incident is created, enriches it with Datadog infrastructure metrics and New Relic application performance data, then alerts the on-call engineering team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Incident Escalation with Monitoring Enrichment"
  description: "When a critical ServiceNow incident is created, enriches it with Datadog infrastructure metrics and New Relic application performance data, then alerts the on-call engineering team via Microsoft Teams."
  tags:
    - operations
    - incident-management
    - servicenow
    - datadog
    - new-relic
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: incident-enrichment
      port: 8080
      tools:
        - name: enrich-and-escalate
          description: "Enrich a ServiceNow incident with monitoring data from Datadog and New Relic, then escalate via Teams."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number."
            - name: hostname
              in: body
              type: string
              description: "The affected infrastructure hostname."
            - name: app_id
              in: body
              type: string
              description: "The New Relic application ID."
            - name: oncall_email
              in: body
              type: string
              description: "The on-call engineer email."
          steps:
            - name: get-incident
              type: call
              call: "servicenow.get-incident"
              with:
                incident_number: "{{incident_number}}"
            - name: get-infra-health
              type: call
              call: "datadog.get-host"
              with:
                hostname: "{{hostname}}"
            - name: get-app-metrics
              type: call
              call: "newrelic.get-app"
              with:
                app_id: "{{app_id}}"
            - name: alert-oncall
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{oncall_email}}"
                text: "CRITICAL: {{get-incident.short_description}}. Host {{hostname}}: CPU={{get-infra-health.cpu_pct}}%, alerts={{get-infra-health.alerts}}. App error rate: {{get-app-metrics.error_rate}}%. Incident: {{incident_number}}."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://ubs.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident?sysparm_query=number={{incident_number}}"
          inputParameters:
            - name: incident_number
              in: path
          operations:
            - name: get-incident
              method: GET
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        name: "DD-API-KEY"
        in: header
        value: "$secrets.datadog_api_key"
      resources:
        - name: hosts
          path: "/hosts?filter={{hostname}}"
          inputParameters:
            - name: hostname
              in: query
          operations:
            - name: get-host
              method: GET
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: apiKey
        name: "Api-Key"
        in: header
        value: "$secrets.newrelic_api_key"
      resources:
        - name: applications
          path: "/applications/{{app_id}}.json"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: get-app
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Triggers an Informatica data quality job for client master data, validates results against the SAP source system, and logs quality metrics in ServiceNow for the data governance team.

naftiko: "0.5"
info:
  label: "Informatica Data Quality Pipeline Trigger"
  description: "Triggers an Informatica data quality job for client master data, validates results against the SAP source system, and logs quality metrics in ServiceNow for the data governance team."
  tags:
    - data-governance
    - data-quality
    - informatica
    - sap
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: data-quality
      port: 8080
      tools:
        - name: run-data-quality-check
          description: "Trigger an Informatica DQ job, validate against SAP, and log results for data governance."
          inputParameters:
            - name: job_name
              in: body
              type: string
              description: "The Informatica data quality job name."
            - name: source_entity
              in: body
              type: string
              description: "The SAP source entity to validate (e.g. BP_MASTER)."
            - name: company_code
              in: body
              type: string
              description: "The SAP company code."
          steps:
            - name: trigger-dq-job
              type: call
              call: "informatica.run-job"
              with:
                job_name: "{{job_name}}"
            - name: get-sap-count
              type: call
              call: "sap.get-entity-count"
              with:
                entity: "{{source_entity}}"
                company_code: "{{company_code}}"
            - name: log-results
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "DQ results: {{job_name}} — {{source_entity}}"
                description: "Job: {{job_name}}. Status: {{trigger-dq-job.status}}. Records processed: {{trigger-dq-job.records_processed}}. SAP source count: {{get-sap-count.count}}. Company: {{company_code}}."
                assigned_group: "Data_Governance"
                category: "data_quality"
  consumes:
    - type: http
      namespace: informatica
      baseUri: "https://dm-us.informaticacloud.com/saas/api/v2"
      authentication:
        type: bearer
        token: "$secrets.informatica_token"
      resources:
        - name: jobs
          path: "/job"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://ubs-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      inputParameters:
        - name: Accept
          in: header
          value: "application/json"
      resources:
        - name: entity-count
          path: "/{{entity}}/$count?$filter=CompanyCode eq '{{company_code}}'"
          inputParameters:
            - name: entity
              in: path
            - name: company_code
              in: query
          operations:
            - name: get-entity-count
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://ubs.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST

Plans infrastructure capacity by analyzing utilization trends, modeling growth, and generating procurement requests.

naftiko: "0.5"
info:
  label: "Infrastructure Capacity Planning Orchestrator"
  description: "Plans infrastructure capacity by analyzing utilization trends, modeling growth, and generating procurement requests."
  tags:
    - infrastructure
    - planning
    - finance
capability:
  exposes:
    - type: mcp
      namespace: infrastructure
      port: 8080
      tools:
        - name: run-infrastructure-capacity-planning-orchestrator
          description: "Plans infrastructure capacity by analyzing utilization trends, modeling growth, and generating procurement requests."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Infrastructure Capacity Planning Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Logs an investment committee decision by recording the vote in Salesforce, uploading meeting minutes to SharePoint, updating the Bloomberg AIM model portfolio, and notifying all committee members via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Investment Committee Decision Logger"
  description: "Logs an investment committee decision by recording the vote in Salesforce, uploading meeting minutes to SharePoint, updating the Bloomberg AIM model portfolio, and notifying all committee members via Microsoft Teams."
  tags:
    - investment-management
    - governance
    - salesforce
    - sharepoint
    - bloomberg-aim
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: investment-committee
      port: 8080
      tools:
        - name: log-committee-decision
          description: "Record an investment committee decision across CRM, documents, and portfolio systems."
          inputParameters:
            - name: decision_id
              in: body
              type: string
              description: "The unique decision identifier."
            - name: decision_type
              in: body
              type: string
              description: "Decision type (allocation_change, new_position, exit_position, model_update)."
            - name: model_id
              in: body
              type: string
              description: "The Bloomberg AIM model portfolio ID."
            - name: committee_channel
              in: body
              type: string
              description: "The Microsoft Teams channel ID for the committee."
          steps:
            - name: record-decision
              type: call
              call: "salesforce.create-activity"
              with:
                subject: "IC Decision: {{decision_id}} — {{decision_type}}"
                description: "Investment committee decision logged. Type: {{decision_type}}. Model: {{model_id}}."
            - name: upload-minutes
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "investment_committee"
                file_path: "Minutes/{{decision_id}}_minutes.json"
                content: "{\"decision_id\": \"{{decision_id}}\", \"type\": \"{{decision_type}}\", \"model\": \"{{model_id}}\"}"
            - name: update-model
              type: call
              call: "aim.update-model"
              with:
                model_id: "{{model_id}}"
                decision_ref: "{{decision_id}}"
            - name: notify-committee
              type: call
              call: "msteams.send-channel-message"
              with:
                channel_id: "{{committee_channel}}"
                text: "IC Decision {{decision_id}} recorded: {{decision_type}}. Model {{model_id}} updated. Minutes: {{upload-minutes.url}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://ubs.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: activities
          path: "/sobjects/Task"
          operations:
            - name: create-activity
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: aim
      baseUri: "https://api.bloomberg.com/eap/aim/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_aim_token"
      resources:
        - name: models
          path: "/models/{{model_id}}"
          inputParameters:
            - name: model_id
              in: path
          operations:
            - name: update-model
              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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Manages IT changes by reviewing requests, scheduling implementation windows, and notifying affected teams.

naftiko: "0.5"
info:
  label: "IT Change Management Orchestrator"
  description: "Manages IT changes by reviewing requests, scheduling implementation windows, and notifying affected teams."
  tags:
    - it
    - servicenow
    - operations
capability:
  exposes:
    - type: mcp
      namespace: it
      port: 8080
      tools:
        - name: run-it-change-management-orchestrator
          description: "Manages IT changes by reviewing requests, scheduling implementation windows, and notifying affected teams."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed IT Change Management Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Retrieves a Jira ticket by issue key.

naftiko: "0.5"
info:
  label: "Jira Ticket Viewer"
  description: "Retrieves a Jira ticket by issue key."
  tags:
    - engineering
    - jira
capability:
  exposes:
    - type: mcp
      namespace: engineering
      port: 8080
      tools:
        - name: get-jira
          description: "Retrieves a Jira ticket by issue key."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The jira ticket viewer identifier."
          call: "engineering-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: engineering-api
      baseUri: "https://api.ubs.com/engineering/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: jira
          path: "/jira/ticket/viewer/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-jira
              method: GET

Refreshes the knowledge base by identifying outdated articles, routing for review, and publishing updates.

naftiko: "0.5"
info:
  label: "Knowledge Base Refresh Orchestrator"
  description: "Refreshes the knowledge base by identifying outdated articles, routing for review, and publishing updates."
  tags:
    - knowledge-management
    - collaboration
    - operations
capability:
  exposes:
    - type: mcp
      namespace: knowledge-management
      port: 8080
      tools:
        - name: run-knowledge-base-refresh-orchestrator
          description: "Refreshes the knowledge base by identifying outdated articles, routing for review, and publishing updates."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Knowledge Base Refresh Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

On KYC review initiation, retrieves client data from Salesforce, requests document uploads via SharePoint, creates a compliance review task in ServiceNow, and notifies the compliance officer in Microsoft Teams.

naftiko: "0.5"
info:
  label: "KYC Document Collection Pipeline"
  description: "On KYC review initiation, retrieves client data from Salesforce, requests document uploads via SharePoint, creates a compliance review task in ServiceNow, and notifies the compliance officer in Microsoft Teams."
  tags:
    - compliance
    - kyc
    - salesforce
    - sharepoint
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: compliance-kyc
      port: 8080
      tools:
        - name: initiate-kyc-review
          description: "Start a KYC document collection process for a client, provisioning document storage and compliance review tasks."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The Salesforce client account ID."
            - name: review_type
              in: body
              type: string
              description: "KYC review type (initial, periodic, event-driven)."
            - name: compliance_officer_email
              in: body
              type: string
              description: "Email of the assigned compliance officer."
          steps:
            - name: get-client
              type: call
              call: "salesforce.get-account"
              with:
                client_id: "{{client_id}}"
            - name: create-doc-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "kyc_documents"
                folder_path: "KYC/{{get-client.Name}}_{{client_id}}/{{review_type}}"
            - name: open-review
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "KYC {{review_type}} review: {{get-client.Name}}"
                description: "Client: {{get-client.Name}}. Segment: {{get-client.Client_Segment__c}}. Document folder: {{create-doc-folder.url}}. Review type: {{review_type}}."
                assigned_group: "Compliance_KYC"
                category: "kyc_review"
            - name: notify-officer
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{compliance_officer_email}}"
                text: "KYC review initiated for {{get-client.Name}} ({{review_type}}). Task: {{open-review.number}}. Upload docs: {{create-doc-folder.url}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://ubs.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{client_id}}"
          inputParameters:
            - name: client_id
              in: path
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://ubs.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

When a high-net-worth prospect engages on LinkedIn, creates a Salesforce lead, enriches with ZoomInfo data, and notifies the assigned private banker via Microsoft Teams.

naftiko: "0.5"
info:
  label: "LinkedIn Advisor Lead Capture"
  description: "When a high-net-worth prospect engages on LinkedIn, creates a Salesforce lead, enriches with ZoomInfo data, and notifies the assigned private banker via Microsoft Teams."
  tags:
    - sales
    - lead-capture
    - linkedin
    - salesforce
    - zoominfo
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: lead-capture
      port: 8080
      tools:
        - name: capture-linkedin-lead
          description: "Create and enrich a lead from LinkedIn engagement for private banking outreach."
          inputParameters:
            - name: linkedin_profile_url
              in: body
              type: string
              description: "The LinkedIn profile URL of the prospect."
            - name: engagement_type
              in: body
              type: string
              description: "The engagement type (comment, share, message)."
            - name: banker_email
              in: body
              type: string
              description: "The assigned private banker email."
          steps:
            - name: enrich-contact
              type: call
              call: "zoominfo.enrich-person"
              with:
                linkedin_url: "{{linkedin_profile_url}}"
            - name: create-lead
              type: call
              call: "salesforce.create-lead"
              with:
                first_name: "{{enrich-contact.first_name}}"
                last_name: "{{enrich-contact.last_name}}"
                company: "{{enrich-contact.company}}"
                title: "{{enrich-contact.title}}"
                email: "{{enrich-contact.email}}"
                lead_source: "LinkedIn_{{engagement_type}}"
            - name: notify-banker
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{banker_email}}"
                text: "New HNW lead: {{enrich-contact.first_name}} {{enrich-contact.last_name}} ({{enrich-contact.title}} at {{enrich-contact.company}}). Source: LinkedIn {{engagement_type}}. Lead ID: {{create-lead.id}}. Net worth estimate: {{enrich-contact.estimated_net_worth}}."
  consumes:
    - type: http
      namespace: zoominfo
      baseUri: "https://api.zoominfo.com/search"
      authentication:
        type: bearer
        token: "$secrets.zoominfo_token"
      resources:
        - name: person-enrich
          path: "/enrich/person"
          operations:
            - name: enrich-person
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://ubs.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: leads
          path: "/sobjects/Lead"
          operations:
            - name: create-lead
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Processes a margin call by fetching portfolio valuations from FactSet, calculating exposure in Bloomberg, creating a Salesforce case for the client, and alerting the credit risk team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Margin Call Processing"
  description: "Processes a margin call by fetching portfolio valuations from FactSet, calculating exposure in Bloomberg, creating a Salesforce case for the client, and alerting the credit risk team via Microsoft Teams."
  tags:
    - risk-management
    - margin-call
    - factset
    - bloomberg-enterprise-data
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: margin-calls
      port: 8080
      tools:
        - name: process-margin-call
          description: "Calculate margin shortfall, create a client case, and alert the credit risk team."
          inputParameters:
            - name: portfolio_id
              in: body
              type: string
              description: "The FactSet portfolio identifier."
            - name: client_id
              in: body
              type: string
              description: "The Salesforce client account ID."
            - name: margin_requirement
              in: body
              type: number
              description: "The current margin requirement amount."
            - name: credit_risk_email
              in: body
              type: string
              description: "The credit risk team email."
          steps:
            - name: get-portfolio-value
              type: call
              call: "factset.get-holdings"
              with:
                portfolio_id: "{{portfolio_id}}"
            - name: get-client
              type: call
              call: "salesforce.get-account"
              with:
                client_id: "{{client_id}}"
            - name: create-case
              type: call
              call: "salesforce.create-case"
              with:
                client_id: "{{client_id}}"
                subject: "Margin call: portfolio {{portfolio_id}}"
                description: "Portfolio value: {{get-portfolio-value.total_market_value}} {{get-portfolio-value.currency}}. Margin requirement: {{margin_requirement}}. Shortfall requires immediate attention."
            - name: alert-credit-risk
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{credit_risk_email}}"
                text: "MARGIN CALL: {{get-client.Name}} ({{client_id}}). Portfolio value: {{get-portfolio-value.total_market_value}} {{get-portfolio-value.currency}}. Required: {{margin_requirement}}. Case: {{create-case.case_number}}."
  consumes:
    - type: http
      namespace: factset
      baseUri: "https://api.factset.com/analytics/v3"
      authentication:
        type: basic
        username: "$secrets.factset_user"
        password: "$secrets.factset_api_key"
      resources:
        - name: portfolios
          path: "/portfolios/{{portfolio_id}}/holdings"
          inputParameters:
            - name: portfolio_id
              in: path
          operations:
            - name: get-holdings
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://ubs.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{client_id}}"
          inputParameters:
            - name: client_id
              in: path
          operations:
            - name: get-account
              method: GET
        - 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: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Evaluates marketing campaign performance by aggregating metrics across channels and generating ROI reports.

naftiko: "0.5"
info:
  label: "Marketing Campaign Performance Orchestrator"
  description: "Evaluates marketing campaign performance by aggregating metrics across channels and generating ROI reports."
  tags:
    - marketing
    - analytics
    - finance
capability:
  exposes:
    - type: mcp
      namespace: marketing
      port: 8080
      tools:
        - name: run-marketing-campaign-performance-orchestrator
          description: "Evaluates marketing campaign performance by aggregating metrics across channels and generating ROI reports."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Marketing Campaign Performance Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Verifies a Mastercard transaction by reference ID, returning authorization status, merchant details, and amount for fraud review teams.

naftiko: "0.5"
info:
  label: "Mastercard Transaction Verification"
  description: "Verifies a Mastercard transaction by reference ID, returning authorization status, merchant details, and amount for fraud review teams."
  tags:
    - payments
    - fraud-detection
    - mastercard
capability:
  exposes:
    - type: mcp
      namespace: payments
      port: 8080
      tools:
        - name: verify-transaction
          description: "Verify a Mastercard transaction by reference ID."
          inputParameters:
            - name: transaction_ref
              in: body
              type: string
              description: "The Mastercard transaction reference ID."
          call: "mastercard.get-transaction"
          with:
            transaction_ref: "{{transaction_ref}}"
          outputParameters:
            - name: auth_status
              type: string
              mapping: "$.transaction.authorizationStatus"
            - name: amount
              type: number
              mapping: "$.transaction.amount"
            - name: merchant_name
              type: string
              mapping: "$.transaction.merchant.name"
  consumes:
    - type: http
      namespace: mastercard
      baseUri: "https://api.mastercard.com/fraud/v2"
      authentication:
        type: oauth1
        consumer_key: "$secrets.mastercard_consumer_key"
        signing_key: "$secrets.mastercard_signing_key"
      resources:
        - name: transactions
          path: "/transactions/{{transaction_ref}}"
          inputParameters:
            - name: transaction_ref
              in: path
          operations:
            - name: get-transaction
              method: GET

Sends a message to a Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Microsoft Teams Message Sender"
  description: "Sends a message to a Microsoft Teams channel."
  tags:
    - communications
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: communications
      port: 8080
      tools:
        - name: get-microsoft
          description: "Sends a message to a Microsoft Teams channel."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The microsoft teams message sender identifier."
          call: "communications-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: communications-api
      baseUri: "https://api.ubs.com/communications/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: microsoft
          path: "/microsoft/teams/message/sender/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-microsoft
              method: GET

Retrieves application performance metrics from New Relic for a given application ID, including response time, throughput, and error rate.

naftiko: "0.5"
info:
  label: "New Relic Application Performance"
  description: "Retrieves application performance metrics from New Relic for a given application ID, including response time, throughput, and error rate."
  tags:
    - operations
    - performance
    - new-relic
capability:
  exposes:
    - type: mcp
      namespace: apm
      port: 8080
      tools:
        - name: get-app-performance
          description: "Fetch New Relic APM metrics for an application by ID."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "The New Relic application ID."
          call: "newrelic.get-app"
          with:
            app_id: "{{app_id}}"
          outputParameters:
            - name: response_time
              type: number
              mapping: "$.application.application_summary.response_time"
            - name: throughput
              type: number
              mapping: "$.application.application_summary.throughput"
            - name: error_rate
              type: number
              mapping: "$.application.application_summary.error_rate"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: apiKey
        name: "Api-Key"
        in: header
        value: "$secrets.newrelic_api_key"
      resources:
        - name: applications
          path: "/applications/{{app_id}}.json"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: get-app
              method: GET

Retrieves a journal entry from Oracle Cloud Financials by entry ID, returning header and line details for reconciliation workflows.

naftiko: "0.5"
info:
  label: "Oracle Cloud Financials Journal Entry"
  description: "Retrieves a journal entry from Oracle Cloud Financials by entry ID, returning header and line details for reconciliation workflows."
  tags:
    - finance
    - reconciliation
    - oracle-cloud
capability:
  exposes:
    - type: mcp
      namespace: finance-oracle
      port: 8080
      tools:
        - name: get-journal-entry
          description: "Fetch an Oracle Cloud Financials journal entry by ID."
          inputParameters:
            - name: journal_id
              in: body
              type: string
              description: "The Oracle Cloud journal entry identifier."
          call: "oracle.get-journal"
          with:
            journal_id: "{{journal_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.Status"
            - name: total_debit
              type: number
              mapping: "$.TotalDebit"
            - name: total_credit
              type: number
              mapping: "$.TotalCredit"
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://ubs-cloud.oraclecloud.com/fscmRestApi/resources/v2"
      authentication:
        type: basic
        username: "$secrets.oracle_user"
        password: "$secrets.oracle_password"
      resources:
        - name: journals
          path: "/journals/{{journal_id}}"
          inputParameters:
            - name: journal_id
              in: path
          operations:
            - name: get-journal
              method: GET

Retrieves portfolio holdings for a client account.

naftiko: "0.5"
info:
  label: "Portfolio Holdings Lookup"
  description: "Retrieves portfolio holdings for a client account."
  tags:
    - wealth-management
    - finance
capability:
  exposes:
    - type: mcp
      namespace: wealth-management
      port: 8080
      tools:
        - name: get-portfolio
          description: "Retrieves portfolio holdings for a client account."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The portfolio holdings lookup identifier."
          call: "wealth-management-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: wealth-management-api
      baseUri: "https://api.ubs.com/wealth-management/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: portfolio
          path: "/portfolio/holdings/lookup/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-portfolio
              method: GET

Retrieves current portfolio holdings from FactSet, compares against target allocation, generates rebalancing trades via Bloomberg AIM, and notifies the portfolio manager via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Portfolio Rebalancing Workflow"
  description: "Retrieves current portfolio holdings from FactSet, compares against target allocation, generates rebalancing trades via Bloomberg AIM, and notifies the portfolio manager via Microsoft Teams."
  tags:
    - wealth-management
    - portfolio
    - rebalancing
    - factset
    - bloomberg-aim
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: portfolio-rebalance
      port: 8080
      tools:
        - name: rebalance-portfolio
          description: "Given a portfolio ID and target allocation model, calculate drift, generate rebalancing orders, and notify the portfolio manager."
          inputParameters:
            - name: portfolio_id
              in: body
              type: string
              description: "The FactSet portfolio identifier."
            - name: model_id
              in: body
              type: string
              description: "The target allocation model identifier."
            - name: pm_email
              in: body
              type: string
              description: "The portfolio manager email for notification."
          steps:
            - name: get-holdings
              type: call
              call: "factset.get-holdings"
              with:
                portfolio_id: "{{portfolio_id}}"
            - name: get-model
              type: call
              call: "factset.get-model"
              with:
                model_id: "{{model_id}}"
            - name: generate-orders
              type: call
              call: "aim.create-basket"
              with:
                portfolio_id: "{{portfolio_id}}"
                model_id: "{{model_id}}"
                current_holdings: "{{get-holdings.holdings}}"
                target_weights: "{{get-model.weights}}"
            - name: notify-pm
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{pm_email}}"
                text: "Rebalancing initiated for portfolio {{portfolio_id}}. {{generate-orders.order_count}} orders generated. Basket ID: {{generate-orders.basket_id}}. Review in Bloomberg AIM."
  consumes:
    - type: http
      namespace: factset
      baseUri: "https://api.factset.com/analytics/v3"
      authentication:
        type: basic
        username: "$secrets.factset_user"
        password: "$secrets.factset_api_key"
      resources:
        - name: portfolios
          path: "/portfolios/{{portfolio_id}}/holdings"
          inputParameters:
            - name: portfolio_id
              in: path
          operations:
            - name: get-holdings
              method: GET
        - name: models
          path: "/models/{{model_id}}"
          inputParameters:
            - name: model_id
              in: path
          operations:
            - name: get-model
              method: GET
    - type: http
      namespace: aim
      baseUri: "https://api.bloomberg.com/eap/aim/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_aim_token"
      resources:
        - name: baskets
          path: "/baskets"
          operations:
            - name: create-basket
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Triggers a dataset refresh in Power BI for a specified workspace and dataset, used to ensure wealth reporting dashboards reflect the latest data.

naftiko: "0.5"
info:
  label: "Power BI Dashboard Refresh"
  description: "Triggers a dataset refresh in Power BI for a specified workspace and dataset, used to ensure wealth reporting dashboards reflect the latest data."
  tags:
    - reporting
    - analytics
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: bi-reporting
      port: 8080
      tools:
        - name: refresh-dataset
          description: "Trigger a Power BI dataset refresh by workspace and dataset ID."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "The Power BI workspace (group) ID."
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID."
          call: "powerbi.refresh-dataset"
          with:
            workspace_id: "{{workspace_id}}"
            dataset_id: "{{dataset_id}}"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: workspace_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST

Triggers a Power BI dataset refresh.

naftiko: "0.5"
info:
  label: "Power BI Dashboard Refresher"
  description: "Triggers a Power BI dataset refresh."
  tags:
    - analytics
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: get-power
          description: "Triggers a Power BI dataset refresh."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The power bi dashboard refresher identifier."
          call: "analytics-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: analytics-api
      baseUri: "https://api.ubs.com/analytics/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: power
          path: "/power/bi/dashboard/refresher/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-power
              method: GET

Generates an investment proposal for a private banking client by pulling client preferences from Salesforce, recommended allocations from FactSet, and market context from Bloomberg, then uploads the proposal to SharePoint and notifies the advisor.

naftiko: "0.5"
info:
  label: "Private Banking Investment Proposal"
  description: "Generates an investment proposal for a private banking client by pulling client preferences from Salesforce, recommended allocations from FactSet, and market context from Bloomberg, then uploads the proposal to SharePoint and notifies the advisor."
  tags:
    - private-banking
    - investment-proposal
    - salesforce
    - factset
    - bloomberg-enterprise-data
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: investment-proposals
      port: 8080
      tools:
        - name: generate-proposal
          description: "Create an investment proposal document from client preferences, model portfolios, and market data."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The Salesforce client account ID."
            - name: risk_profile
              in: body
              type: string
              description: "Client risk profile (conservative, balanced, growth, aggressive)."
            - name: advisor_email
              in: body
              type: string
              description: "The private banker email."
          steps:
            - name: get-client
              type: call
              call: "salesforce.get-account"
              with:
                client_id: "{{client_id}}"
            - name: get-model
              type: call
              call: "factset.get-model"
              with:
                model_id: "ubs_{{risk_profile}}"
            - name: get-outlook
              type: call
              call: "bloomberg.get-research"
              with:
                topic: "ubs_cio_outlook"
            - name: upload-proposal
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "investment_proposals"
                file_path: "Proposals/{{get-client.Name}}_{{risk_profile}}_proposal.json"
                content: "{\"client\": \"{{get-client.Name}}\", \"risk_profile\": \"{{risk_profile}}\", \"model_weights\": {{get-model.weights}}, \"cio_outlook\": \"{{get-outlook.summary}}\"}"
            - name: notify-advisor
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{advisor_email}}"
                text: "Investment proposal ready for {{get-client.Name}} ({{risk_profile}} profile). Document: {{upload-proposal.url}}. Model: ubs_{{risk_profile}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://ubs.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{client_id}}"
          inputParameters:
            - name: client_id
              in: path
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: factset
      baseUri: "https://api.factset.com/analytics/v3"
      authentication:
        type: basic
        username: "$secrets.factset_user"
        password: "$secrets.factset_api_key"
      resources:
        - name: models
          path: "/models/{{model_id}}"
          inputParameters:
            - name: model_id
              in: path
          operations:
            - name: get-model
              method: GET
    - type: http
      namespace: bloomberg
      baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_token"
      resources:
        - name: research
          path: "/research/{{topic}}"
          inputParameters:
            - name: topic
              in: path
          operations:
            - name: get-research
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Analyzes procurement spend by categorizing purchases, identifying savings opportunities, and generating reports.

naftiko: "0.5"
info:
  label: "Procurement Spend Analysis Orchestrator"
  description: "Analyzes procurement spend by categorizing purchases, identifying savings opportunities, and generating reports."
  tags:
    - procurement
    - analytics
    - finance
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: run-procurement-spend-analysis-orchestrator
          description: "Analyzes procurement spend by categorizing purchases, identifying savings opportunities, and generating reports."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Procurement Spend Analysis Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Generates quarterly business reviews by aggregating KPIs from multiple systems, creating presentations, and distributing to stakeholders.

naftiko: "0.5"
info:
  label: "Quarterly Business Review Orchestrator"
  description: "Generates quarterly business reviews by aggregating KPIs from multiple systems, creating presentations, and distributing to stakeholders."
  tags:
    - analytics
    - business
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: run-quarterly-business-review-orchestrator
          description: "Generates quarterly business reviews by aggregating KPIs from multiple systems, creating presentations, and distributing to stakeholders."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Quarterly Business Review Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Generates a quarterly performance report by pulling portfolio returns from FactSet, benchmark data from Bloomberg, client context from Salesforce, and uploads the final report to SharePoint for advisor distribution.

naftiko: "0.5"
info:
  label: "Quarterly Client Performance Report"
  description: "Generates a quarterly performance report by pulling portfolio returns from FactSet, benchmark data from Bloomberg, client context from Salesforce, and uploads the final report to SharePoint for advisor distribution."
  tags:
    - wealth-management
    - reporting
    - quarterly-review
    - factset
    - bloomberg-enterprise-data
    - salesforce
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: quarterly-reports
      port: 8080
      tools:
        - name: generate-quarterly-report
          description: "Compile portfolio performance, benchmark comparison, and client context into a quarterly report."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The Salesforce client account ID."
            - name: portfolio_id
              in: body
              type: string
              description: "The FactSet portfolio identifier."
            - name: benchmark_ticker
              in: body
              type: string
              description: "The Bloomberg benchmark ticker (e.g. SPX Index)."
            - name: quarter
              in: body
              type: string
              description: "The reporting quarter (e.g. 2026-Q1)."
          steps:
            - name: get-client
              type: call
              call: "salesforce.get-account"
              with:
                client_id: "{{client_id}}"
            - name: get-portfolio-perf
              type: call
              call: "factset.get-performance"
              with:
                portfolio_id: "{{portfolio_id}}"
                period: "{{quarter}}"
            - name: get-benchmark
              type: call
              call: "bloomberg.get-quote"
              with:
                ticker: "{{benchmark_ticker}}"
            - name: upload-report
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "client_reports"
                file_path: "Quarterly/{{quarter}}/{{get-client.Name}}_{{portfolio_id}}.json"
                content: "{\"client\": \"{{get-client.Name}}\", \"quarter\": \"{{quarter}}\", \"portfolio_return\": \"{{get-portfolio-perf.total_return}}\", \"benchmark_return\": \"{{get-benchmark.change_pct}}\", \"alpha\": \"{{get-portfolio-perf.alpha}}\"}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://ubs.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{client_id}}"
          inputParameters:
            - name: client_id
              in: path
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: factset
      baseUri: "https://api.factset.com/analytics/v3"
      authentication:
        type: basic
        username: "$secrets.factset_user"
        password: "$secrets.factset_api_key"
      resources:
        - name: performance
          path: "/portfolios/{{portfolio_id}}/performance?period={{period}}"
          inputParameters:
            - name: portfolio_id
              in: path
            - name: period
              in: query
          operations:
            - name: get-performance
              method: GET
    - type: http
      namespace: bloomberg
      baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_token"
      resources:
        - name: quotes
          path: "/quotes/{{ticker}}"
          inputParameters:
            - name: ticker
              in: path
          operations:
            - name: get-quote
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: upload-file
              method: PUT

Extracts financial data from SAP, enriches with Bloomberg reference data, validates against Oracle Cloud Financials, and logs the submission in ServiceNow for regulatory audit trail.

naftiko: "0.5"
info:
  label: "Regulatory Reporting Data Pipeline"
  description: "Extracts financial data from SAP, enriches with Bloomberg reference data, validates against Oracle Cloud Financials, and logs the submission in ServiceNow for regulatory audit trail."
  tags:
    - compliance
    - regulatory-reporting
    - sap
    - bloomberg-enterprise-data
    - oracle-cloud
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: regulatory-reporting
      port: 8080
      tools:
        - name: prepare-regulatory-submission
          description: "Extract, validate, and log a regulatory data submission across SAP, Bloomberg, Oracle, and ServiceNow."
          inputParameters:
            - name: report_type
              in: body
              type: string
              description: "Regulatory report type (e.g. FINMA, MiFID, Basel)."
            - name: company_code
              in: body
              type: string
              description: "The SAP company code."
            - name: reporting_period
              in: body
              type: string
              description: "The reporting period (e.g. 2026-Q1)."
          steps:
            - name: get-gl-data
              type: call
              call: "sap.get-gl-extract"
              with:
                company_code: "{{company_code}}"
                period: "{{reporting_period}}"
            - name: get-reference-data
              type: call
              call: "bloomberg.get-reference-data"
              with:
                dataset: "regulatory_reference"
                period: "{{reporting_period}}"
            - name: validate-oracle
              type: call
              call: "oracle.get-trial-balance"
              with:
                company_code: "{{company_code}}"
                period: "{{reporting_period}}"
            - name: log-submission
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "{{report_type}} submission: {{company_code}} {{reporting_period}}"
                description: "GL records: {{get-gl-data.record_count}}. Oracle validation: {{validate-oracle.status}}. Reference data enriched."
                assigned_group: "Regulatory_Reporting"
                category: "regulatory_submission"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ubs-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRYITEMBASIC_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      inputParameters:
        - name: Accept
          in: header
          value: "application/json"
        - name: sap-client
          in: header
          value: "100"
      resources:
        - name: gl-extract
          path: "/A_GLAccountLineItem?$filter=CompanyCode eq '{{company_code}}' and FiscalPeriod eq '{{period}}'"
          inputParameters:
            - name: company_code
              in: query
            - name: period
              in: query
          operations:
            - name: get-gl-extract
              method: GET
    - type: http
      namespace: bloomberg
      baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_token"
      resources:
        - name: reference
          path: "/{{dataset}}?period={{period}}"
          inputParameters:
            - name: dataset
              in: path
            - name: period
              in: query
          operations:
            - name: get-reference-data
              method: GET
    - type: http
      namespace: oracle
      baseUri: "https://ubs-cloud.oraclecloud.com/fscmRestApi/resources/v2"
      authentication:
        type: basic
        username: "$secrets.oracle_user"
        password: "$secrets.oracle_password"
      resources:
        - name: trial-balance
          path: "/trialBalances?companyCode={{company_code}}&period={{period}}"
          inputParameters:
            - name: company_code
              in: query
            - name: period
              in: query
          operations:
            - name: get-trial-balance
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://ubs.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST

Pulls portfolio holdings from FactSet, enriches with Bloomberg market data, calculates sector exposure, refreshes the Power BI risk dashboard, and alerts the risk manager via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Risk Exposure Report Generator"
  description: "Pulls portfolio holdings from FactSet, enriches with Bloomberg market data, calculates sector exposure, refreshes the Power BI risk dashboard, and alerts the risk manager via Microsoft Teams."
  tags:
    - risk-management
    - reporting
    - factset
    - bloomberg-enterprise-data
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: risk-reporting
      port: 8080
      tools:
        - name: generate-risk-report
          description: "Generate an exposure report for a portfolio, refresh the risk dashboard, and alert the risk manager."
          inputParameters:
            - name: portfolio_id
              in: body
              type: string
              description: "The FactSet portfolio identifier."
            - name: workspace_id
              in: body
              type: string
              description: "The Power BI workspace ID for the risk dashboard."
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID for the risk dashboard."
            - name: risk_manager_email
              in: body
              type: string
              description: "Email of the risk manager to notify."
          steps:
            - name: get-holdings
              type: call
              call: "factset.get-holdings"
              with:
                portfolio_id: "{{portfolio_id}}"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                workspace_id: "{{workspace_id}}"
                dataset_id: "{{dataset_id}}"
            - name: notify-risk-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{risk_manager_email}}"
                text: "Risk exposure report updated for portfolio {{portfolio_id}}. Total positions: {{get-holdings.holdings.length}}. Market value: {{get-holdings.total_market_value}} {{get-holdings.currency}}. Dashboard refreshed."
  consumes:
    - type: http
      namespace: factset
      baseUri: "https://api.factset.com/analytics/v3"
      authentication:
        type: basic
        username: "$secrets.factset_user"
        password: "$secrets.factset_api_key"
      resources:
        - name: portfolios
          path: "/portfolios/{{portfolio_id}}/holdings"
          inputParameters:
            - name: portfolio_id
              in: path
          operations:
            - name: get-holdings
              method: GET
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: workspace_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a Salesforce account by account ID.

naftiko: "0.5"
info:
  label: "Salesforce Account Viewer"
  description: "Retrieves a Salesforce account by account ID."
  tags:
    - sales
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: sales
      port: 8080
      tools:
        - name: get-salesforce
          description: "Retrieves a Salesforce account by account ID."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The salesforce account viewer identifier."
          call: "sales-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: sales-api
      baseUri: "https://api.ubs.com/sales/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: salesforce
          path: "/salesforce/account/viewer/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-salesforce
              method: GET

Looks up a wealth management client record in Salesforce by client ID, returning relationship manager assignment, AUM tier, and contact details.

naftiko: "0.5"
info:
  label: "Salesforce Client Relationship Lookup"
  description: "Looks up a wealth management client record in Salesforce by client ID, returning relationship manager assignment, AUM tier, and contact details."
  tags:
    - client-management
    - crm
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: client-crm
      port: 8080
      tools:
        - name: get-client-record
          description: "Retrieve a Salesforce client record by UBS client ID."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The UBS client identifier stored in Salesforce."
          call: "salesforce.get-account"
          with:
            client_id: "{{client_id}}"
          outputParameters:
            - name: client_name
              type: string
              mapping: "$.Name"
            - name: relationship_manager
              type: string
              mapping: "$.Owner.Name"
            - name: aum_tier
              type: string
              mapping: "$.AUM_Tier__c"
            - name: segment
              type: string
              mapping: "$.Client_Segment__c"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://ubs.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{client_id}}"
          inputParameters:
            - name: client_id
              in: path
          operations:
            - name: get-account
              method: GET

Screens a client or counterparty against global sanctions lists by pulling entity data from Salesforce, running screening via the compliance system, and escalating matches through ServiceNow and Microsoft Teams.

naftiko: "0.5"
info:
  label: "Sanctions Screening Pipeline"
  description: "Screens a client or counterparty against global sanctions lists by pulling entity data from Salesforce, running screening via the compliance system, and escalating matches through ServiceNow and Microsoft Teams."
  tags:
    - compliance
    - sanctions
    - screening
    - salesforce
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: sanctions-screening
      port: 8080
      tools:
        - name: screen-entity
          description: "Screen a client or counterparty against sanctions lists and escalate any matches."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The Salesforce account ID."
            - name: screening_type
              in: body
              type: string
              description: "Screening type (onboarding, periodic, transaction)."
            - name: compliance_email
              in: body
              type: string
              description: "The compliance officer email."
          steps:
            - name: get-entity
              type: call
              call: "salesforce.get-account"
              with:
                client_id: "{{client_id}}"
            - name: create-screening-task
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Sanctions screening: {{get-entity.Name}} ({{screening_type}})"
                description: "Entity: {{get-entity.Name}}. Type: {{screening_type}}. Country: {{get-entity.BillingCountry}}. Segment: {{get-entity.Client_Segment__c}}."
                assigned_group: "Financial_Crime_Unit"
                category: "sanctions_screening"
            - name: alert-compliance
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{compliance_email}}"
                text: "Sanctions screening initiated: {{get-entity.Name}} ({{screening_type}}). Task: {{create-screening-task.number}}. Country: {{get-entity.BillingCountry}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://ubs.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{client_id}}"
          inputParameters:
            - name: client_id
              in: path
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://ubs.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves the current general ledger account balance from SAP S/4HANA for a given company code and GL account, used by finance and treasury teams.

naftiko: "0.5"
info:
  label: "SAP General Ledger Balance"
  description: "Retrieves the current general ledger account balance from SAP S/4HANA for a given company code and GL account, used by finance and treasury teams."
  tags:
    - finance
    - accounting
    - sap
capability:
  exposes:
    - type: mcp
      namespace: finance-gl
      port: 8080
      tools:
        - name: get-gl-balance
          description: "Fetch the GL account balance from SAP by company code and account number."
          inputParameters:
            - name: company_code
              in: body
              type: string
              description: "The SAP company code (e.g. UB01)."
            - name: gl_account
              in: body
              type: string
              description: "The general ledger account number."
          call: "sap.get-gl-balance"
          with:
            company_code: "{{company_code}}"
            gl_account: "{{gl_account}}"
          outputParameters:
            - name: balance
              type: number
              mapping: "$.d.EndingBalanceAmtInCoCodeCrcy"
            - name: currency
              type: string
              mapping: "$.d.CompanyCodeCurrency"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ubs-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRYITEMBASIC_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      inputParameters:
        - name: Accept
          in: header
          value: "application/json"
        - name: sap-client
          in: header
          value: "100"
      resources:
        - name: gl-accounts
          path: "/A_GLAccountBalance(CompanyCode='{{company_code}}',GLAccount='{{gl_account}}')"
          inputParameters:
            - name: company_code
              in: path
            - name: gl_account
              in: path
          operations:
            - name: get-gl-balance
              method: GET

Conducts security audits by scanning systems, documenting findings in ServiceNow, and tracking remediation.

naftiko: "0.5"
info:
  label: "Security Audit Orchestrator"
  description: "Conducts security audits by scanning systems, documenting findings in ServiceNow, and tracking remediation."
  tags:
    - security
    - servicenow
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: run-security-audit-orchestrator
          description: "Conducts security audits by scanning systems, documenting findings in ServiceNow, and tracking remediation."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Security Audit Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Creates a new incident in ServiceNow.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Creator"
  description: "Creates a new incident in ServiceNow."
  tags:
    - it
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: it
      port: 8080
      tools:
        - name: get-servicenow
          description: "Creates a new incident in ServiceNow."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The servicenow incident creator identifier."
          call: "it-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: it-api
      baseUri: "https://api.ubs.com/it/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: servicenow
          path: "/servicenow/incident/creator/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-servicenow
              method: GET

Retrieves the current status and assignment details of a ServiceNow incident for UBS IT operations teams.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Status"
  description: "Retrieves the current status and assignment details of a ServiceNow incident for UBS IT operations teams."
  tags:
    - operations
    - incident-management
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: it-operations
      port: 8080
      tools:
        - name: get-incident-status
          description: "Look up a ServiceNow incident by number and return its status, priority, and assigned group."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number (e.g. INC0012345)."
          call: "servicenow.get-incident"
          with:
            incident_number: "{{incident_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result.state"
            - name: priority
              type: string
              mapping: "$.result.priority"
            - name: assigned_to
              type: string
              mapping: "$.result.assigned_to.display_value"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://ubs.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident?sysparm_query=number={{incident_number}}"
          inputParameters:
            - name: incident_number
              in: path
          operations:
            - name: get-incident
              method: GET

Sends a notification to a Slack channel.

naftiko: "0.5"
info:
  label: "Slack Notification Publisher"
  description: "Sends a notification to a Slack channel."
  tags:
    - communications
    - slack
capability:
  exposes:
    - type: mcp
      namespace: communications
      port: 8080
      tools:
        - name: get-slack
          description: "Sends a notification to a Slack channel."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The slack notification publisher identifier."
          call: "communications-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: communications-api
      baseUri: "https://api.ubs.com/communications/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: slack
          path: "/slack/notification/publisher/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-slack
              method: GET

Runs an analytics query against the Snowflake data warehouse.

naftiko: "0.5"
info:
  label: "Snowflake Analytics Query"
  description: "Runs an analytics query against the Snowflake data warehouse."
  tags:
    - analytics
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: get-snowflake
          description: "Runs an analytics query against the Snowflake data warehouse."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The snowflake analytics query identifier."
          call: "analytics-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: analytics-api
      baseUri: "https://api.ubs.com/analytics/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: snowflake
          path: "/snowflake/analytics/query/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-snowflake
              method: GET

Triggers a SonarQube security scan on a trading platform codebase, creates Azure DevOps work items for critical findings, and notifies the engineering lead via Microsoft Teams.

naftiko: "0.5"
info:
  label: "SonarQube Security Scan with JIRA Tracking"
  description: "Triggers a SonarQube security scan on a trading platform codebase, creates Azure DevOps work items for critical findings, and notifies the engineering lead via Microsoft Teams."
  tags:
    - security
    - code-quality
    - sonarqube
    - azure-devops
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: security-scanning
      port: 8080
      tools:
        - name: scan-and-track
          description: "Run a SonarQube scan, create work items for critical findings, and notify the engineering lead."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "The SonarQube project key."
            - name: azdo_project
              in: body
              type: string
              description: "The Azure DevOps project name."
            - name: lead_email
              in: body
              type: string
              description: "The engineering lead email."
          steps:
            - name: get-scan-results
              type: call
              call: "sonarqube.get-issues"
              with:
                project_key: "{{project_key}}"
                severity: "CRITICAL"
            - name: create-work-item
              type: call
              call: "azdevops.create-work-item"
              with:
                project: "{{azdo_project}}"
                title: "SonarQube critical: {{get-scan-results.issue_count}} findings in {{project_key}}"
                description: "{{get-scan-results.issue_count}} critical security findings. Top issue: {{get-scan-results.top_issue}}. Run full scan review."
            - name: notify-lead
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{lead_email}}"
                text: "Security scan alert: {{get-scan-results.issue_count}} critical findings in {{project_key}}. Work item: {{create-work-item.id}}. Immediate remediation required."
  consumes:
    - type: http
      namespace: sonarqube
      baseUri: "https://sonarqube.ubs.com/api"
      authentication:
        type: bearer
        token: "$secrets.sonarqube_token"
      resources:
        - name: issues
          path: "/issues/search?componentKeys={{project_key}}&severities={{severity}}"
          inputParameters:
            - name: project_key
              in: query
            - name: severity
              in: query
          operations:
            - name: get-issues
              method: GET
    - type: http
      namespace: azdevops
      baseUri: "https://dev.azure.com/ubs"
      authentication:
        type: bearer
        token: "$secrets.azdevops_token"
      resources:
        - name: work-items
          path: "/{{project}}/_apis/wit/workitems/$Bug?api-version=7.0"
          inputParameters:
            - name: project
              in: path
          operations:
            - name: create-work-item
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Runs a portfolio stress test by fetching holdings from FactSet, applying shock scenarios from Bloomberg Economics, computing P&L impact, and publishing results to Power BI with risk committee notification.

naftiko: "0.5"
info:
  label: "Stress Testing Scenario Runner"
  description: "Runs a portfolio stress test by fetching holdings from FactSet, applying shock scenarios from Bloomberg Economics, computing P&L impact, and publishing results to Power BI with risk committee notification."
  tags:
    - risk-management
    - stress-testing
    - factset
    - bloomberg-economics
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: stress-testing
      port: 8080
      tools:
        - name: run-stress-test
          description: "Apply a macroeconomic stress scenario to a portfolio and publish the results."
          inputParameters:
            - name: portfolio_id
              in: body
              type: string
              description: "The FactSet portfolio identifier."
            - name: scenario_id
              in: body
              type: string
              description: "The Bloomberg Economics scenario identifier."
            - 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."
            - name: risk_committee_email
              in: body
              type: string
              description: "The risk committee distribution email."
          steps:
            - name: get-holdings
              type: call
              call: "factset.get-holdings"
              with:
                portfolio_id: "{{portfolio_id}}"
            - name: get-scenario
              type: call
              call: "bloomberg.get-scenario"
              with:
                scenario_id: "{{scenario_id}}"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                workspace_id: "{{workspace_id}}"
                dataset_id: "{{dataset_id}}"
            - name: notify-committee
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{risk_committee_email}}"
                text: "Stress test complete: {{get-scenario.name}} applied to portfolio {{portfolio_id}}. Positions: {{get-holdings.holdings.length}}. Dashboard refreshed. Review results in Power BI."
  consumes:
    - type: http
      namespace: factset
      baseUri: "https://api.factset.com/analytics/v3"
      authentication:
        type: basic
        username: "$secrets.factset_user"
        password: "$secrets.factset_api_key"
      resources:
        - name: portfolios
          path: "/portfolios/{{portfolio_id}}/holdings"
          inputParameters:
            - name: portfolio_id
              in: path
          operations:
            - name: get-holdings
              method: GET
    - type: http
      namespace: bloomberg
      baseUri: "https://api.bloomberg.com/eap/economics/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_token"
      resources:
        - name: scenarios
          path: "/scenarios/{{scenario_id}}"
          inputParameters:
            - name: scenario_id
              in: path
          operations:
            - name: get-scenario
              method: GET
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: workspace_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Prices a structured product by fetching underlying security data from Bloomberg, running valuation model via FactSet, and publishing the indicative price to the Salesforce opportunity record with advisor notification.

naftiko: "0.5"
info:
  label: "Structured Products Pricing Pipeline"
  description: "Prices a structured product by fetching underlying security data from Bloomberg, running valuation model via FactSet, and publishing the indicative price to the Salesforce opportunity record with advisor notification."
  tags:
    - trading
    - structured-products
    - bloomberg-enterprise-data
    - factset
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: structured-pricing
      port: 8080
      tools:
        - name: price-structured-product
          description: "Generate an indicative price for a structured product and update the client opportunity."
          inputParameters:
            - name: underlying_ticker
              in: body
              type: string
              description: "The Bloomberg ticker of the underlying security."
            - name: product_type
              in: body
              type: string
              description: "The structured product type (e.g. autocallable, reverse-convertible, barrier)."
            - name: opportunity_id
              in: body
              type: string
              description: "The Salesforce opportunity ID."
            - name: advisor_email
              in: body
              type: string
              description: "The advisor email for notification."
          steps:
            - name: get-underlying
              type: call
              call: "bloomberg.get-quote"
              with:
                ticker: "{{underlying_ticker}}"
            - name: run-valuation
              type: call
              call: "factset.run-pricing-model"
              with:
                underlying_price: "{{get-underlying.lastPrice}}"
                product_type: "{{product_type}}"
                volatility: "{{get-underlying.impliedVol}}"
            - name: update-opportunity
              type: call
              call: "salesforce.update-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
                indicative_price: "{{run-valuation.indicative_price}}"
                pricing_date: "{{run-valuation.pricing_date}}"
            - name: notify-advisor
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{advisor_email}}"
                text: "Structured product priced: {{product_type}} on {{underlying_ticker}}. Indicative: {{run-valuation.indicative_price}}. Underlying: {{get-underlying.lastPrice}}. Opportunity updated."
  consumes:
    - type: http
      namespace: bloomberg
      baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_token"
      resources:
        - name: quotes
          path: "/quotes/{{ticker}}"
          inputParameters:
            - name: ticker
              in: path
          operations:
            - name: get-quote
              method: GET
    - type: http
      namespace: factset
      baseUri: "https://api.factset.com/analytics/v3"
      authentication:
        type: basic
        username: "$secrets.factset_user"
        password: "$secrets.factset_api_key"
      resources:
        - name: pricing-models
          path: "/pricing/structured"
          operations:
            - name: run-pricing-model
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://ubs.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: update-opportunity
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Collects sustainability metrics by gathering environmental data, calculating carbon footprint, and publishing ESG reports.

naftiko: "0.5"
info:
  label: "Sustainability Metrics Collection Orchestrator"
  description: "Collects sustainability metrics by gathering environmental data, calculating carbon footprint, and publishing ESG reports."
  tags:
    - sustainability
    - analytics
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: sustainability
      port: 8080
      tools:
        - name: run-sustainability-metrics-collection-orchestrator
          description: "Collects sustainability metrics by gathering environmental data, calculating carbon footprint, and publishing ESG reports."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Sustainability Metrics Collection Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Triggers a Teradata analytics query for portfolio risk metrics, pushes results to Power BI, and alerts the analytics team via Microsoft Teams when thresholds are breached.

naftiko: "0.5"
info:
  label: "Teradata Analytics Refresh and Alert"
  description: "Triggers a Teradata analytics query for portfolio risk metrics, pushes results to Power BI, and alerts the analytics team via Microsoft Teams when thresholds are breached."
  tags:
    - analytics
    - data
    - teradata
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: analytics-refresh
      port: 8080
      tools:
        - name: refresh-risk-analytics
          description: "Run Teradata risk analytics, refresh Power BI, and alert on threshold breaches."
          inputParameters:
            - name: query_name
              in: body
              type: string
              description: "The Teradata stored query name."
            - 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."
            - name: analytics_email
              in: body
              type: string
              description: "The analytics team email."
          steps:
            - name: run-query
              type: call
              call: "teradata.execute-query"
              with:
                query_name: "{{query_name}}"
            - name: refresh-bi
              type: call
              call: "powerbi.refresh-dataset"
              with:
                workspace_id: "{{workspace_id}}"
                dataset_id: "{{dataset_id}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{analytics_email}}"
                text: "Risk analytics refresh complete: {{query_name}}. Records: {{run-query.row_count}}. Power BI dashboard updated. Review for threshold breaches."
  consumes:
    - type: http
      namespace: teradata
      baseUri: "https://ubs-teradata.cloud.teradata.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.teradata_token"
      resources:
        - name: queries
          path: "/queries/{{query_name}}/execute"
          inputParameters:
            - name: query_name
              in: path
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: workspace_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Assesses third-party risks by collecting vendor questionnaires, scoring responses, and tracking remediation plans.

naftiko: "0.5"
info:
  label: "Third Party Risk Assessment Orchestrator"
  description: "Assesses third-party risks by collecting vendor questionnaires, scoring responses, and tracking remediation plans."
  tags:
    - risk
    - procurement
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: risk
      port: 8080
      tools:
        - name: run-third-party-risk-assessment-orchestrator
          description: "Assesses third-party risks by collecting vendor questionnaires, scoring responses, and tracking remediation plans."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Third Party Risk Assessment Orchestrator for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Before executing an equity trade via Bloomberg AIM, validates the order against compliance rules, checks client suitability in Salesforce, and logs the trade decision in ServiceNow for audit.

naftiko: "0.5"
info:
  label: "Trade Execution with Compliance Pre-Check"
  description: "Before executing an equity trade via Bloomberg AIM, validates the order against compliance rules, checks client suitability in Salesforce, and logs the trade decision in ServiceNow for audit."
  tags:
    - trading
    - compliance
    - bloomberg-aim
    - salesforce
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: trade-compliance
      port: 8080
      tools:
        - name: execute-compliant-trade
          description: "Validate compliance, check client suitability, execute a trade via Bloomberg AIM, and create an audit record in ServiceNow."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The Salesforce account ID for the client."
            - name: ticker
              in: body
              type: string
              description: "The Bloomberg ticker symbol."
            - name: side
              in: body
              type: string
              description: "BUY or SELL."
            - name: quantity
              in: body
              type: number
              description: "Number of shares to trade."
            - name: portfolio_id
              in: body
              type: string
              description: "The managed portfolio identifier."
          steps:
            - name: get-client
              type: call
              call: "salesforce.get-account"
              with:
                client_id: "{{client_id}}"
            - name: get-quote
              type: call
              call: "bloomberg.get-quote"
              with:
                ticker: "{{ticker}}"
            - name: submit-order
              type: call
              call: "aim.create-order"
              with:
                ticker: "{{ticker}}"
                side: "{{side}}"
                quantity: "{{quantity}}"
                portfolio_id: "{{portfolio_id}}"
            - name: log-audit
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Trade executed: {{side}} {{quantity}} {{ticker}} for {{get-client.Name}}"
                description: "Portfolio: {{portfolio_id}}. Price: {{get-quote.lastPrice}}. Order: {{submit-order.order_id}}. Segment: {{get-client.Client_Segment__c}}."
                assigned_group: "Compliance_Audit"
                category: "trade_audit"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://ubs.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{client_id}}"
          inputParameters:
            - name: client_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: quotes
          path: "/quotes/{{ticker}}"
          inputParameters:
            - name: ticker
              in: path
          operations:
            - name: get-quote
              method: GET
    - type: http
      namespace: aim
      baseUri: "https://api.bloomberg.com/eap/aim/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_aim_token"
      resources:
        - name: orders
          path: "/orders"
          operations:
            - name: create-order
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://ubs.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST

Checks the settlement status of a trade.

naftiko: "0.5"
info:
  label: "Trade Settlement Status"
  description: "Checks the settlement status of a trade."
  tags:
    - trading
    - operations
capability:
  exposes:
    - type: mcp
      namespace: trading
      port: 8080
      tools:
        - name: get-trade
          description: "Checks the settlement status of a trade."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The trade settlement status identifier."
          call: "trading-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: trading-api
      baseUri: "https://api.ubs.com/trading/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: trade
          path: "/trade/settlement/status/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-trade
              method: GET

Retrieves the latest request-for-quote pricing for a fixed income security on Tradeweb, used by bond trading desks.

naftiko: "0.5"
info:
  label: "Tradeweb RFQ Price Check"
  description: "Retrieves the latest request-for-quote pricing for a fixed income security on Tradeweb, used by bond trading desks."
  tags:
    - trading
    - fixed-income
    - tradeweb
capability:
  exposes:
    - type: mcp
      namespace: fixed-income-trading
      port: 8080
      tools:
        - name: get-rfq-price
          description: "Fetch latest Tradeweb RFQ pricing for a bond by ISIN."
          inputParameters:
            - name: isin
              in: body
              type: string
              description: "The ISIN of the fixed income security."
          call: "tradeweb.get-rfq"
          with:
            isin: "{{isin}}"
          outputParameters:
            - name: bid_price
              type: number
              mapping: "$.rfq.bidPrice"
            - name: ask_price
              type: number
              mapping: "$.rfq.askPrice"
            - name: mid_yield
              type: number
              mapping: "$.rfq.midYield"
  consumes:
    - type: http
      namespace: tradeweb
      baseUri: "https://api.tradeweb.com/v2"
      authentication:
        type: bearer
        token: "$secrets.tradeweb_token"
      resources:
        - name: rfqs
          path: "/rfq/{{isin}}"
          inputParameters:
            - name: isin
              in: path
          operations:
            - name: get-rfq
              method: GET

Reconciles treasury cash positions by pulling SAP GL balances, Oracle Cloud payment data, and Bloomberg FX rates, then logs discrepancies in ServiceNow for investigation.

naftiko: "0.5"
info:
  label: "Treasury Cash Position Reconciliation"
  description: "Reconciles treasury cash positions by pulling SAP GL balances, Oracle Cloud payment data, and Bloomberg FX rates, then logs discrepancies in ServiceNow for investigation."
  tags:
    - treasury
    - cash-management
    - reconciliation
    - sap
    - oracle-cloud
    - bloomberg-enterprise-data
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: treasury-recon
      port: 8080
      tools:
        - name: reconcile-cash-position
          description: "Pull GL balances, payment data, and FX rates to reconcile cash positions across entities."
          inputParameters:
            - name: company_code
              in: body
              type: string
              description: "The SAP company code."
            - name: currency
              in: body
              type: string
              description: "The reporting currency (e.g. CHF, USD, EUR)."
            - name: as_of_date
              in: body
              type: string
              description: "The reconciliation date (YYYY-MM-DD)."
          steps:
            - name: get-gl-balance
              type: call
              call: "sap.get-cash-balance"
              with:
                company_code: "{{company_code}}"
                currency: "{{currency}}"
            - name: get-payments
              type: call
              call: "oracle.get-payments"
              with:
                company_code: "{{company_code}}"
                date: "{{as_of_date}}"
            - name: get-fx-rate
              type: call
              call: "bloomberg.get-fx-rate"
              with:
                currency_pair: "{{currency}}CHF"
            - name: log-discrepancy
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Cash recon: {{company_code}} {{currency}} as of {{as_of_date}}"
                description: "GL balance: {{get-gl-balance.balance}} {{currency}}. Payments total: {{get-payments.total}}. FX rate: {{get-fx-rate.rate}}. Review for discrepancies."
                assigned_group: "Treasury_Operations"
                category: "cash_reconciliation"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ubs-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRYITEMBASIC_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      inputParameters:
        - name: Accept
          in: header
          value: "application/json"
      resources:
        - name: cash-balance
          path: "/A_GLAccountBalance?$filter=CompanyCode eq '{{company_code}}' and Currency eq '{{currency}}'"
          inputParameters:
            - name: company_code
              in: query
            - name: currency
              in: query
          operations:
            - name: get-cash-balance
              method: GET
    - type: http
      namespace: oracle
      baseUri: "https://ubs-cloud.oraclecloud.com/fscmRestApi/resources/v2"
      authentication:
        type: basic
        username: "$secrets.oracle_user"
        password: "$secrets.oracle_password"
      resources:
        - name: payments
          path: "/payments?companyCode={{company_code}}&date={{date}}"
          inputParameters:
            - name: company_code
              in: query
            - name: date
              in: query
          operations:
            - name: get-payments
              method: GET
    - 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/{{currency_pair}}"
          inputParameters:
            - name: currency_pair
              in: path
          operations:
            - name: get-fx-rate
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://ubs.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST

Manages vendor contract renewals by reviewing terms, routing for legal approval, and executing via DocuSign.

naftiko: "0.5"
info:
  label: "Vendor Contract Renewal Pipeline"
  description: "Manages vendor contract renewals by reviewing terms, routing for legal approval, and executing via DocuSign."
  tags:
    - procurement
    - legal
    - docusign
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: run-vendor-contract-renewal-pipeline
          description: "Manages vendor contract renewals by reviewing terms, routing for legal approval, and executing via DocuSign."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "The unique request identifier."
          steps:
            - name: step-1
              type: call
              call: "primary-api.initiate"
              with:
                request_id: "{{request_id}}"
            - name: step-2
              type: call
              call: "secondary-api.process"
              with:
                request_id: "{{request_id}}"
                data: "{{step-1.result}}"
            - name: notify
              type: call
              call: "notification-api.send"
              with:
                channel: "operations"
                message: "Completed Vendor Contract Renewal Pipeline for request {{request_id}}."
  consumes:
    - type: http
      namespace: primary-api
      baseUri: "https://api.ubs.com/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: primary
          path: "/process"
          operations:
            - name: initiate
              method: POST
    - type: http
      namespace: secondary-api
      baseUri: "https://api.ubs.com/v2"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: secondary
          path: "/execute"
          operations:
            - name: process
              method: POST
    - type: http
      namespace: notification-api
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/notifications"
          operations:
            - name: send
              method: POST

Assesses a third-party vendor by pulling the vendor record from Salesforce, retrieving compliance attestations from SharePoint, scoring risk, and logging the assessment in ServiceNow.

naftiko: "0.5"
info:
  label: "Vendor Risk Assessment Workflow"
  description: "Assesses a third-party vendor by pulling the vendor record from Salesforce, retrieving compliance attestations from SharePoint, scoring risk, and logging the assessment in ServiceNow."
  tags:
    - risk-management
    - vendor-risk
    - salesforce
    - sharepoint
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: vendor-risk
      port: 8080
      tools:
        - name: assess-vendor-risk
          description: "Perform a vendor risk assessment by pulling vendor data, compliance docs, and logging the outcome."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "The Salesforce vendor account ID."
            - name: assessment_type
              in: body
              type: string
              description: "Assessment type (initial, annual, event-triggered)."
          steps:
            - name: get-vendor
              type: call
              call: "salesforce.get-account"
              with:
                client_id: "{{vendor_id}}"
            - name: get-attestations
              type: call
              call: "sharepoint.list-files"
              with:
                site_id: "vendor_compliance"
                folder_path: "Attestations/{{get-vendor.Name}}"
            - name: log-assessment
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Vendor risk assessment: {{get-vendor.Name}} ({{assessment_type}})"
                description: "Vendor: {{get-vendor.Name}}. Type: {{assessment_type}}. Attestation docs: {{get-attestations.file_count}}. Industry: {{get-vendor.Industry}}."
                assigned_group: "Vendor_Risk_Management"
                category: "vendor_assessment"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://ubs.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{client_id}}"
          inputParameters:
            - name: client_id
              in: path
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{folder_path}}:/children"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: list-files
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://ubs.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST

Prepares a client review meeting by pulling the client profile from Salesforce, portfolio performance from FactSet, recent market commentary from Bloomberg News, and creating a summary in SharePoint for the advisor.

naftiko: "0.5"
info:
  label: "Wealth Advisor Client Review Prep"
  description: "Prepares a client review meeting by pulling the client profile from Salesforce, portfolio performance from FactSet, recent market commentary from Bloomberg News, and creating a summary in SharePoint for the advisor."
  tags:
    - wealth-management
    - client-review
    - salesforce
    - factset
    - bloomberg-news
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: advisor-prep
      port: 8080
      tools:
        - name: prepare-client-review
          description: "Aggregate client data, portfolio performance, and market context into a review document for the wealth advisor."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The Salesforce client account ID."
            - name: portfolio_id
              in: body
              type: string
              description: "The FactSet portfolio identifier."
          steps:
            - name: get-client
              type: call
              call: "salesforce.get-account"
              with:
                client_id: "{{client_id}}"
            - name: get-performance
              type: call
              call: "factset.get-performance"
              with:
                portfolio_id: "{{portfolio_id}}"
            - name: get-market-news
              type: call
              call: "bloomberg.get-news"
              with:
                topic: "wealth management outlook"
            - name: save-review-doc
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "advisor_reviews"
                file_path: "Reviews/{{get-client.Name}}_{{portfolio_id}}_review.json"
                content: "{\"client\": \"{{get-client.Name}}\", \"segment\": \"{{get-client.Client_Segment__c}}\", \"ytd_return\": \"{{get-performance.ytd_return}}\", \"market_summary\": \"{{get-market-news.headline}}\"}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://ubs.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{client_id}}"
          inputParameters:
            - name: client_id
              in: path
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: factset
      baseUri: "https://api.factset.com/analytics/v3"
      authentication:
        type: basic
        username: "$secrets.factset_user"
        password: "$secrets.factset_api_key"
      resources:
        - name: performance
          path: "/portfolios/{{portfolio_id}}/performance"
          inputParameters:
            - name: portfolio_id
              in: path
          operations:
            - name: get-performance
              method: GET
    - type: http
      namespace: bloomberg
      baseUri: "https://api.bloomberg.com/eap/news/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_token"
      resources:
        - name: news
          path: "/stories?topic={{topic}}&limit=5"
          inputParameters:
            - name: topic
              in: query
          operations:
            - name: get-news
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: upload-file
              method: PUT

Prepares a wealth transfer plan by pulling client family structure from Salesforce, estate planning documents from SharePoint, tax implications from SAP, and creating a review meeting in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Wealth Transfer Planning Workflow"
  description: "Prepares a wealth transfer plan by pulling client family structure from Salesforce, estate planning documents from SharePoint, tax implications from SAP, and creating a review meeting in Microsoft Teams."
  tags:
    - private-banking
    - wealth-transfer
    - estate-planning
    - salesforce
    - sharepoint
    - sap
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: wealth-transfer
      port: 8080
      tools:
        - name: prepare-wealth-transfer
          description: "Compile family structure, estate documents, and tax data for a wealth transfer planning session."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The Salesforce client account ID."
            - name: advisor_email
              in: body
              type: string
              description: "The private banker email."
            - name: company_code
              in: body
              type: string
              description: "The SAP company code for tax jurisdiction."
          steps:
            - name: get-client
              type: call
              call: "salesforce.get-account"
              with:
                client_id: "{{client_id}}"
            - name: get-estate-docs
              type: call
              call: "sharepoint.list-files"
              with:
                site_id: "estate_planning"
                folder_path: "Clients/{{get-client.Name}}_{{client_id}}"
            - name: get-tax-data
              type: call
              call: "sap.get-tax-summary"
              with:
                client_id: "{{client_id}}"
                company_code: "{{company_code}}"
            - name: notify-advisor
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{advisor_email}}"
                text: "Wealth transfer prep ready for {{get-client.Name}}. Estate docs: {{get-estate-docs.file_count}} files. Tax jurisdiction: {{company_code}}. Effective tax rate: {{get-tax-data.effective_rate}}%. Schedule client meeting."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://ubs.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{client_id}}"
          inputParameters:
            - name: client_id
              in: path
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{folder_path}}:/children"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: list-files
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://ubs-s4.sap.com/sap/opu/odata/sap/API_TAX_REPORTING_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: tax-summary
          path: "/TaxSummary?$filter=ClientId eq '{{client_id}}' and CompanyCode eq '{{company_code}}'"
          inputParameters:
            - name: client_id
              in: query
            - name: company_code
              in: query
          operations:
            - name: get-tax-summary
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Fetches an employee profile from Workday by worker ID, returning name, department, cost center, and reporting chain for HR and compliance workflows.

naftiko: "0.5"
info:
  label: "Workday Employee Profile Lookup"
  description: "Fetches an employee profile from Workday by worker ID, returning name, department, cost center, and reporting chain for HR and compliance workflows."
  tags:
    - hr
    - employee-data
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr-data
      port: 8080
      tools:
        - name: get-employee-profile
          description: "Retrieve a Workday employee profile by worker ID."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID."
          call: "workday.get-worker"
          with:
            worker_id: "{{worker_id}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.worker.fullName"
            - name: department
              type: string
              mapping: "$.worker.department"
            - name: cost_center
              type: string
              mapping: "$.worker.costCenter"
            - name: manager_id
              type: string
              mapping: "$.worker.managerId"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET

Retrieves employee profile from Workday.

naftiko: "0.5"
info:
  label: "Workday Employee Profile"
  description: "Retrieves employee profile from Workday."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-workday
          description: "Retrieves employee profile from Workday."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The workday employee profile identifier."
          call: "hr-api.get-data"
          with:
            entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: hr-api
      baseUri: "https://api.ubs.com/hr/v1"
      authentication:
        type: bearer
        token: "$secrets.ubs_api_token"
      resources:
        - name: workday
          path: "/workday/employee/profile/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-workday
              method: GET