Barclays Capabilities

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

Sort
Expand

Collects access entitlements, routes for review, revokes expired access, and creates audit records.

naftiko: "0.5"
info:
  label: "Access Review Certification Pipeline"
  description: "Collects access entitlements, routes for review, revokes expired access, and creates audit records."
  tags:
    - security
    - okta
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: access_review_certification_pipeline
          description: "Orchestrate access review certification pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-okta
              type: call
              call: "okta.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                data: "{{get-okta.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Access Review Certification Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: okta
      baseUri: "https://barclays.okta.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.okta_api_token"
        header: "Authorization" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: okta-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Retrieves a signed URL for a report file stored in Amazon S3. Used by compliance and audit teams to access archived regulatory reports.

naftiko: "0.5"
info:
  label: "Amazon S3 Report Archive Retrieval"
  description: "Retrieves a signed URL for a report file stored in Amazon S3. Used by compliance and audit teams to access archived regulatory reports."
  tags:
    - storage
    - archive
    - amazon-s3
capability:
  exposes:
    - type: mcp
      namespace: report-archive
      port: 8080
      tools:
        - name: get-archived-report
          description: "Generate a pre-signed URL for an S3 archived report."
          inputParameters:
            - name: bucket
              in: body
              type: string
              description: "S3 bucket name."
            - name: object_key
              in: body
              type: string
              description: "S3 object key (file path)."
          call: "s3.get-presigned-url"
          with:
            bucket: "{{bucket}}"
            key: "{{object_key}}"
  consumes:
    - type: http
      namespace: s3
      baseUri: "https://s3.eu-west-2.amazonaws.com"
      authentication:
        type: aws-sigv4
        region: "eu-west-2"
        access_key: "$secrets.aws_access_key"
        secret_key: "$secrets.aws_secret_key"
      resources:
        - name: objects
          path: "/{{bucket}}/{{key}}"
          inputParameters:
            - name: bucket
              in: path
            - name: key
              in: path
          operations:
            - name: get-presigned-url
              method: GET

When an AML alert fires, pulls transaction details from Oracle Database, enriches with customer profile from Salesforce, runs risk scoring, and creates a JIRA investigation case for the compliance team.

naftiko: "0.5"
info:
  label: "AML Transaction Alert Triage"
  description: "When an AML alert fires, pulls transaction details from Oracle Database, enriches with customer profile from Salesforce, runs risk scoring, and creates a JIRA investigation case for the compliance team."
  tags:
    - aml
    - compliance
    - oracle-database
    - salesforce
    - jira
capability:
  exposes:
    - type: mcp
      namespace: aml-triage
      port: 8080
      tools:
        - name: triage-aml-alert
          description: "Triage an AML transaction alert by enriching with customer data and opening an investigation ticket."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "The AML alert identifier from the monitoring system."
            - name: transaction_id
              in: body
              type: string
              description: "The transaction reference to investigate."
          steps:
            - name: get-transaction
              type: call
              call: "oracle.get-transaction"
              with:
                transaction_id: "{{transaction_id}}"
            - name: get-customer-profile
              type: call
              call: "salesforce.get-account"
              with:
                account_id: "{{get-transaction.customer_account_id}}"
            - name: create-investigation
              type: call
              call: "jira.create-issue"
              with:
                project: "AML"
                issue_type: "Investigation"
                summary: "AML Alert {{alert_id}} - {{get-customer-profile.Name}}"
                description: "Transaction {{transaction_id}} amount {{get-transaction.amount}} {{get-transaction.currency}}. Customer risk: {{get-customer-profile.Risk_Rating__c}}."
                priority: "High"
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://barclays-ords.db.oracle.com/ords/aml/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_ords_token"
      resources:
        - name: transactions
          path: "/transactions/{{transaction_id}}"
          inputParameters:
            - name: transaction_id
              in: path
          operations:
            - name: get-transaction
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://barclays.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://barclays.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Identifies deprecated API consumers, sends migration notices, tracks adoption, and reports progress.

naftiko: "0.5"
info:
  label: "API Deprecation Notice Pipeline"
  description: "Identifies deprecated API consumers, sends migration notices, tracks adoption, and reports progress."
  tags:
    - engineering
    - datadog
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: engineering
      port: 8080
      tools:
        - name: api_deprecation_notice_pipeline
          description: "Orchestrate api deprecation notice pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-datadog
              type: call
              call: "datadog.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-jira
              type: call
              call: "jira.process-resource"
              with:
                data: "{{get-datadog.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "API Deprecation Notice Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        header: "DD-API-KEY" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: datadog-op
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://barclays.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Retrieves account details from the Avaloq core banking system by account number, returning balance, currency, status, and holder name. Used by operations staff for account inquiries.

naftiko: "0.5"
info:
  label: "Avaloq Banking Core Account Inquiry"
  description: "Retrieves account details from the Avaloq core banking system by account number, returning balance, currency, status, and holder name. Used by operations staff for account inquiries."
  tags:
    - core-banking
    - accounts
    - avaloq
capability:
  exposes:
    - type: mcp
      namespace: core-banking
      port: 8080
      tools:
        - name: get-account-details
          description: "Look up an account in Avaloq core banking by account number."
          inputParameters:
            - name: account_number
              in: body
              type: string
              description: "Avaloq account number."
          call: "avaloq.get-account"
          with:
            account_number: "{{account_number}}"
          outputParameters:
            - name: balance
              type: string
              mapping: "$.account.balance"
            - name: currency
              type: string
              mapping: "$.account.currency"
            - name: status
              type: string
              mapping: "$.account.status"
            - name: holder_name
              type: string
              mapping: "$.account.holderName"
  consumes:
    - type: http
      namespace: avaloq
      baseUri: "https://barclays-avaloq.internal.barclays.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.avaloq_token"
      resources:
        - name: accounts
          path: "/accounts/{{account_number}}"
          inputParameters:
            - name: account_number
              in: path
          operations:
            - name: get-account
              method: GET

Orchestrates a BACS batch payment submission by generating the payment file from Oracle, validating entries against Avaloq, submitting via Amazon SQS to the BACS gateway, and notifying treasury operations in Microsoft Teams.

naftiko: "0.5"
info:
  label: "BACS Payment Batch Submission"
  description: "Orchestrates a BACS batch payment submission by generating the payment file from Oracle, validating entries against Avaloq, submitting via Amazon SQS to the BACS gateway, and notifying treasury operations in Microsoft Teams."
  tags:
    - payments
    - bacs
    - oracle-database
    - avaloq
    - amazon-sqs
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: bacs-payments
      port: 8080
      tools:
        - name: submit-bacs-batch
          description: "Generate, validate, and submit a BACS payment batch with operations notification."
          inputParameters:
            - name: batch_id
              in: body
              type: string
              description: "Payment batch identifier."
            - name: processing_date
              in: body
              type: string
              description: "BACS processing date (YYYY-MM-DD)."
          steps:
            - name: generate-file
              type: call
              call: "oracle.generate-bacs-file"
              with:
                batch_id: "{{batch_id}}"
                processing_date: "{{processing_date}}"
            - name: validate-accounts
              type: call
              call: "avaloq.validate-batch"
              with:
                batch_id: "{{batch_id}}"
                payment_count: "{{generate-file.payment_count}}"
            - name: submit-batch
              type: call
              call: "sqs.send-message"
              with:
                queue_url: "https://sqs.eu-west-2.amazonaws.com/barclays/bacs-submissions"
                message_body: "{\"batchId\":\"{{batch_id}}\",\"processingDate\":\"{{processing_date}}\",\"paymentCount\":\"{{generate-file.payment_count}}\",\"totalAmount\":\"{{generate-file.total_amount}}\"}"
            - name: notify-ops
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "treasury-operations"
                channel_id: "bacs-processing"
                text: "BACS batch {{batch_id}} submitted for {{processing_date}}. Payments: {{generate-file.payment_count}}. Total: GBP {{generate-file.total_amount}}. Validation: {{validate-accounts.status}}."
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://barclays-ords.db.oracle.com/ords/payments/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_ords_token"
      resources:
        - name: bacs-files
          path: "/bacs/generate"
          operations:
            - name: generate-bacs-file
              method: POST
    - type: http
      namespace: avaloq
      baseUri: "https://barclays-avaloq.internal.barclays.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.avaloq_token"
      resources:
        - name: batch-validation
          path: "/payments/validate-batch"
          operations:
            - name: validate-batch
              method: POST
    - type: http
      namespace: sqs
      baseUri: "https://sqs.eu-west-2.amazonaws.com"
      authentication:
        type: aws-sigv4
        region: "eu-west-2"
        access_key: "$secrets.aws_access_key"
        secret_key: "$secrets.aws_secret_key"
      resources:
        - name: messages
          path: "/barclays/bacs-submissions"
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Retrieves current monitoring alert status. Used by Barclays teams.

naftiko: "0.5"
info:
  label: "Barclays Alert Status Check"
  description: "Retrieves current monitoring alert status. Used by Barclays teams."
  tags:
    - banking
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: confluence
      port: 8080
      tools:
        - name: get-alert_status_check
          description: "Retrieves current monitoring alert status. Used by Barclays teams."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "The alert_id to look up." 
          call: "confluence.get-alert_id"
          with:
            alert_id: "{{alert_id}}"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://barclays.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: barclays_alert_status_check
              method: GET

Checks availability of an API endpoint. Used by Barclays teams.

naftiko: "0.5"
info:
  label: "Barclays API Endpoint Status"
  description: "Checks availability of an API endpoint. Used by Barclays teams."
  tags:
    - banking
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: datadog
      port: 8080
      tools:
        - name: get-api_endpoint_status
          description: "Checks availability of an API endpoint. Used by Barclays teams."
          inputParameters:
            - name: endpoint_url
              in: body
              type: string
              description: "The endpoint_url to look up." 
          call: "datadog.get-endpoint_url"
          with:
            endpoint_url: "{{endpoint_url}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        header: "DD-API-KEY" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: barclays_api_endpoint_status
              method: GET

Identifies KYC records due for review, collects updated information, validates identity, and updates records.

naftiko: "0.5"
info:
  label: "Client KYC Refresh Pipeline"
  description: "Identifies KYC records due for review, collects updated information, validates identity, and updates records."
  tags:
    - compliance
    - salesforce
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: barclays_client_kyc_refresh_pipeline
          description: "Orchestrate client kyc refresh pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-salesforce
              type: call
              call: "salesforce.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                data: "{{get-salesforce.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Client KYC Refresh Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://barclays.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Retrieves compliance check status. Used by Barclays teams.

naftiko: "0.5"
info:
  label: "Barclays Compliance Check Status"
  description: "Retrieves compliance check status. Used by Barclays teams."
  tags:
    - banking
    - okta
capability:
  exposes:
    - type: mcp
      namespace: okta
      port: 8080
      tools:
        - name: get-compliance_check_status
          description: "Retrieves compliance check status. Used by Barclays teams."
          inputParameters:
            - name: check_id
              in: body
              type: string
              description: "The check_id to look up." 
          call: "okta.get-check_id"
          with:
            check_id: "{{check_id}}"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://barclays.okta.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.okta_api_token"
        header: "Authorization" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: barclays_compliance_check_stat
              method: GET

Queries cost and spending data. Used by Barclays teams.

naftiko: "0.5"
info:
  label: "Barclays Cost Report Query"
  description: "Queries cost and spending data. Used by Barclays teams."
  tags:
    - banking
    - github
capability:
  exposes:
    - type: mcp
      namespace: github
      port: 8080
      tools:
        - name: get-cost_report_query
          description: "Queries cost and spending data. Used by Barclays teams."
          inputParameters:
            - name: cost_center
              in: body
              type: string
              description: "The cost_center to look up." 
          call: "github.get-cost_center"
          with:
            cost_center: "{{cost_center}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: barclays_cost_report_query
              method: GET

Collects applicant data, runs credit models, generates decisions, and notifies relationship managers.

naftiko: "0.5"
info:
  label: "Credit Scoring Pipeline"
  description: "Collects applicant data, runs credit models, generates decisions, and notifies relationship managers."
  tags:
    - lending
    - snowflake
    - salesforce
    - slack
capability:
  exposes:
    - type: mcp
      namespace: lending
      port: 8080
      tools:
        - name: barclays_credit_scoring_pipeline
          description: "Orchestrate credit scoring pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-salesforce
              type: call
              call: "salesforce.process-resource"
              with:
                data: "{{get-snowflake.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Credit Scoring Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://barclays.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Executes a read-only analytics query. Used by Barclays teams.

naftiko: "0.5"
info:
  label: "Barclays Database Query Runner"
  description: "Executes a read-only analytics query. Used by Barclays teams."
  tags:
    - banking
    - elasticsearch
capability:
  exposes:
    - type: mcp
      namespace: elasticsearc
      port: 8080
      tools:
        - name: get-database_query_runner
          description: "Executes a read-only analytics query. Used by Barclays teams."
          inputParameters:
            - name: sql_query
              in: body
              type: string
              description: "The sql_query to look up." 
          call: "elasticsearch.get-sql_query"
          with:
            sql_query: "{{sql_query}}"
  consumes:
    - type: http
      namespace: elasticsearch
      baseUri: "https://barclays-es.com:9200"
      authentication:
        type: bearer
        token: "$secrets.elasticsearch_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: barclays_database_query_runner
              method: GET

Checks status of a recent deployment. Used by Barclays teams.

naftiko: "0.5"
info:
  label: "Barclays Deployment Status Check"
  description: "Checks status of a recent deployment. Used by Barclays teams."
  tags:
    - banking
    - slack
capability:
  exposes:
    - type: mcp
      namespace: slack
      port: 8080
      tools:
        - name: get-deployment_status_check
          description: "Checks status of a recent deployment. Used by Barclays teams."
          inputParameters:
            - name: deployment_id
              in: body
              type: string
              description: "The deployment_id to look up." 
          call: "slack.get-deployment_id"
          with:
            deployment_id: "{{deployment_id}}"
  consumes:
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: barclays_deployment_status_che
              method: GET

Retrieves a document from knowledge management. Used by Barclays teams.

naftiko: "0.5"
info:
  label: "Barclays Document Retrieval"
  description: "Retrieves a document from knowledge management. Used by Barclays teams."
  tags:
    - banking
    - grafana
capability:
  exposes:
    - type: mcp
      namespace: grafana
      port: 8080
      tools:
        - name: get-document_retrieval
          description: "Retrieves a document from knowledge management. Used by Barclays teams."
          inputParameters:
            - name: document_id
              in: body
              type: string
              description: "The document_id to look up." 
          call: "grafana.get-document_id"
          with:
            document_id: "{{document_id}}"
  consumes:
    - type: http
      namespace: grafana
      baseUri: "https://barclays-grafana.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_api_key" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: barclays_document_retrieval
              method: GET

Provisions new employee accounts, assigns training, creates IT tickets, and notifies managers.

naftiko: "0.5"
info:
  label: "Employee Onboarding Automation Pipeline"
  description: "Provisions new employee accounts, assigns training, creates IT tickets, and notifies managers."
  tags:
    - hr
    - workday
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: barclays_employee_onboarding_automation
          description: "Orchestrate employee onboarding automation pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-workday
              type: call
              call: "workday.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                data: "{{get-workday.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Employee Onboarding Automation Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/barclays"
      authentication:
        type: bearer
        token: "$secrets.workday_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: workday-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Searches application logs for matching patterns. Used by Barclays teams.

naftiko: "0.5"
info:
  label: "Barclays Log Search Query"
  description: "Searches application logs for matching patterns. Used by Barclays teams."
  tags:
    - banking
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: salesforce
      port: 8080
      tools:
        - name: get-log_search_query
          description: "Searches application logs for matching patterns. Used by Barclays teams."
          inputParameters:
            - name: search_query
              in: body
              type: string
              description: "The search_query to look up." 
          call: "salesforce.get-search_query"
          with:
            search_query: "{{search_query}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://barclays.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: barclays_log_search_query
              method: GET

Monitors portfolio exposures, calculates VaR, detects limit breaches, and alerts risk management.

naftiko: "0.5"
info:
  label: "Market Risk Monitoring Pipeline"
  description: "Monitors portfolio exposures, calculates VaR, detects limit breaches, and alerts risk management."
  tags:
    - risk
    - snowflake
    - grafana
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: risk
      port: 8080
      tools:
        - name: barclays_market_risk_monitoring_pipeline
          description: "Orchestrate market risk monitoring pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-grafana
              type: call
              call: "grafana.process-resource"
              with:
                data: "{{get-snowflake.result}}"
            - name: create-pagerduty
              type: call
              call: "pagerduty.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Market Risk Monitoring Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: grafana
      baseUri: "https://barclays-grafana.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_api_key" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: grafana-op
              method: POST
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: pagerduty-op
              method: POST

Queries metric values from a monitoring dashboard. Used by Barclays teams.

naftiko: "0.5"
info:
  label: "Barclays Metric Dashboard Query"
  description: "Queries metric values from a monitoring dashboard. Used by Barclays teams."
  tags:
    - banking
    - splunk
capability:
  exposes:
    - type: mcp
      namespace: splunk
      port: 8080
      tools:
        - name: get-metric_dashboard_query
          description: "Queries metric values from a monitoring dashboard. Used by Barclays teams."
          inputParameters:
            - name: metric_name
              in: body
              type: string
              description: "The metric_name to look up." 
          call: "splunk.get-metric_name"
          with:
            metric_name: "{{metric_name}}"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://barclays-splunk.com/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: barclays_metric_dashboard_quer
              method: GET

Checks the current status of a project. Used by Barclays teams.

naftiko: "0.5"
info:
  label: "Barclays Project Status Check"
  description: "Checks the current status of a project. Used by Barclays teams."
  tags:
    - banking
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: snowflake
      port: 8080
      tools:
        - name: get-project_status_check
          description: "Checks the current status of a project. Used by Barclays teams."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "The project_key to look up." 
          call: "snowflake.get-project_key"
          with:
            project_key: "{{project_key}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: barclays_project_status_check
              method: GET

Calculates capital ratios, generates regulatory reports, validates against thresholds, and submits.

naftiko: "0.5"
info:
  label: "Regulatory Capital Reporting Pipeline"
  description: "Calculates capital ratios, generates regulatory reports, validates against thresholds, and submits."
  tags:
    - regulatory
    - snowflake
    - powerbi
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: regulatory
      port: 8080
      tools:
        - name: barclays_regulatory_capital_reporting_pi
          description: "Orchestrate regulatory capital reporting pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-powerbi
              type: call
              call: "powerbi.process-resource"
              with:
                data: "{{get-snowflake.result}}"
            - name: create-confluence
              type: call
              call: "confluence.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Regulatory Capital Reporting Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: powerbi-op
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://barclays.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: confluence-op
              method: POST

Retrieves code repository information. Used by Barclays teams.

naftiko: "0.5"
info:
  label: "Barclays Repository Info Lookup"
  description: "Retrieves code repository information. Used by Barclays teams."
  tags:
    - banking
    - workday
capability:
  exposes:
    - type: mcp
      namespace: workday
      port: 8080
      tools:
        - name: get-repository_info_lookup
          description: "Retrieves code repository information. Used by Barclays teams."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "The repo_name to look up." 
          call: "workday.get-repo_name"
          with:
            repo_name: "{{repo_name}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/barclays"
      authentication:
        type: bearer
        token: "$secrets.workday_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: barclays_repository_info_looku
              method: GET

Searches application logs for matching patterns. Used by Barclays teams.

naftiko: "0.5"
info:
  label: "Barclays Log Search Query"
  description: "Searches application logs for matching patterns. Used by Barclays teams."
  tags:
    - banking
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: salesforce
      port: 8080
      tools:
        - name: get-log_search_query
          description: "Searches application logs for matching patterns. Used by Barclays teams."
          inputParameters:
            - name: search_query
              in: body
              type: string
              description: "The search_query to look up." 
          call: "salesforce.get-search_query"
          with:
            search_query: "{{search_query}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://barclays.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: barclays_salesforce_log_search
              method: GET

Detects security incidents, enriches with context, creates response tickets, and notifies the SOC.

naftiko: "0.5"
info:
  label: "Security Incident Response Pipeline"
  description: "Detects security incidents, enriches with context, creates response tickets, and notifies the SOC."
  tags:
    - security
    - splunk
    - servicenow
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: barclays_security_incident_response_pipe
          description: "Orchestrate security incident response pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-splunk
              type: call
              call: "splunk.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                data: "{{get-splunk.result}}"
            - name: create-pagerduty
              type: call
              call: "pagerduty.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Security Incident Response Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://barclays-splunk.com/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: splunk-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: pagerduty-op
              method: POST

Retrieves vulnerability scan results. Used by Barclays teams.

naftiko: "0.5"
info:
  label: "Barclays Security Scan Results"
  description: "Retrieves vulnerability scan results. Used by Barclays teams."
  tags:
    - banking
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: pagerduty
      port: 8080
      tools:
        - name: get-security_scan_results
          description: "Retrieves vulnerability scan results. Used by Barclays teams."
          inputParameters:
            - name: scan_id
              in: body
              type: string
              description: "The scan_id to look up." 
          call: "pagerduty.get-scan_id"
          with:
            scan_id: "{{scan_id}}"
  consumes:
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: barclays_security_scan_results
              method: GET

Checks the health status of a monitored service. Used by Barclays teams.

naftiko: "0.5"
info:
  label: "Barclays Service Health Check"
  description: "Checks the health status of a monitored service. Used by Barclays teams."
  tags:
    - banking
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: servicenow
      port: 8080
      tools:
        - name: get-service_health_check
          description: "Checks the health status of a monitored service. Used by Barclays teams."
          inputParameters:
            - name: health_target
              in: body
              type: string
              description: "The health_target to look up." 
          call: "servicenow.get-health_target"
          with:
            health_target: "{{health_target}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: barclays_service_health_check
              method: GET

Checks the health status of a monitored service. Used by Barclays teams.

naftiko: "0.5"
info:
  label: "Barclays Service Health Check"
  description: "Checks the health status of a monitored service. Used by Barclays teams."
  tags:
    - banking
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: servicenow
      port: 8080
      tools:
        - name: get-service_health_check
          description: "Checks the health status of a monitored service. Used by Barclays teams."
          inputParameters:
            - name: health_target
              in: body
              type: string
              description: "The health_target to look up." 
          call: "servicenow.get-health_target"
          with:
            health_target: "{{health_target}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: barclays_servicenow_service_he
              method: GET

Queries metric values from a monitoring dashboard. Used by Barclays teams.

naftiko: "0.5"
info:
  label: "Barclays Metric Dashboard Query"
  description: "Queries metric values from a monitoring dashboard. Used by Barclays teams."
  tags:
    - banking
    - splunk
capability:
  exposes:
    - type: mcp
      namespace: splunk
      port: 8080
      tools:
        - name: get-metric_dashboard_query
          description: "Queries metric values from a monitoring dashboard. Used by Barclays teams."
          inputParameters:
            - name: metric_name
              in: body
              type: string
              description: "The metric_name to look up." 
          call: "splunk.get-metric_name"
          with:
            metric_name: "{{metric_name}}"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://barclays-splunk.com/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: barclays_splunk_metric_dashboa
              method: GET

Retrieves the details of a support ticket. Used by Barclays teams.

naftiko: "0.5"
info:
  label: "Barclays Ticket Details Lookup"
  description: "Retrieves the details of a support ticket. Used by Barclays teams."
  tags:
    - banking
    - powerbi
capability:
  exposes:
    - type: mcp
      namespace: powerbi
      port: 8080
      tools:
        - name: get-ticket_details_lookup
          description: "Retrieves the details of a support ticket. Used by Barclays teams."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The ticket_id to look up." 
          call: "powerbi.get-ticket_id"
          with:
            ticket_id: "{{ticket_id}}"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: barclays_ticket_details_lookup
              method: GET

Monitors transactions for suspicious patterns, scores risk, creates alerts, and notifies compliance.

naftiko: "0.5"
info:
  label: "Transaction Monitoring Pipeline"
  description: "Monitors transactions for suspicious patterns, scores risk, creates alerts, and notifies compliance."
  tags:
    - compliance
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: barclays_transaction_monitoring_pipeline
          description: "Orchestrate transaction monitoring pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                data: "{{get-snowflake.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Transaction Monitoring Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Retrieves user account details from the directory. Used by Barclays teams.

naftiko: "0.5"
info:
  label: "Barclays User Account Lookup"
  description: "Retrieves user account details from the directory. Used by Barclays teams."
  tags:
    - banking
    - jira
capability:
  exposes:
    - type: mcp
      namespace: jira
      port: 8080
      tools:
        - name: get-user_account_lookup
          description: "Retrieves user account details from the directory. Used by Barclays teams."
          inputParameters:
            - name: user_id
              in: body
              type: string
              description: "The user_id to look up." 
          call: "jira.get-user_id"
          with:
            user_id: "{{user_id}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://barclays.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: barclays_user_account_lookup
              method: GET

Retrieves the latest economic indicator value from Bloomberg Economics by indicator code. Returns value, date, and prior reading for macro research.

naftiko: "0.5"
info:
  label: "Bloomberg Economics Indicator Fetch"
  description: "Retrieves the latest economic indicator value from Bloomberg Economics by indicator code. Returns value, date, and prior reading for macro research."
  tags:
    - research
    - economics
    - bloomberg-economics
capability:
  exposes:
    - type: mcp
      namespace: macro-research
      port: 8080
      tools:
        - name: get-economic-indicator
          description: "Fetch an economic indicator from Bloomberg Economics."
          inputParameters:
            - name: indicator_code
              in: body
              type: string
              description: "Bloomberg Economics indicator code (e.g. GDP CQOQ Index)."
          call: "bloomberg-econ.get-indicator"
          with:
            indicator: "{{indicator_code}}"
          outputParameters:
            - name: value
              type: string
              mapping: "$.data.value"
            - name: date
              type: string
              mapping: "$.data.date"
            - name: prior
              type: string
              mapping: "$.data.prior"
  consumes:
    - type: http
      namespace: bloomberg-econ
      baseUri: "https://bql.data.bloomberg.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_api_key"
      resources:
        - name: economics
          path: "/economics/{{indicator}}"
          inputParameters:
            - name: indicator
              in: path
          operations:
            - name: get-indicator
              method: GET

Retrieves real-time market data for a given security from Bloomberg Enterprise Data, returning price, volume, and daily change. Used by traders and portfolio managers for quick instrument checks.

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 daily change. Used by traders and portfolio managers for quick instrument checks."
  tags:
    - trading
    - market-data
    - bloomberg-enterprise-data
capability:
  exposes:
    - type: mcp
      namespace: market-data
      port: 8080
      tools:
        - name: get-security-price
          description: "Fetch real-time price, volume, and change for a Bloomberg security identifier."
          inputParameters:
            - name: ticker
              in: body
              type: string
              description: "Bloomberg ticker symbol (e.g. BARC LN Equity)."
          call: "bloomberg.get-security"
          with:
            ticker: "{{ticker}}"
          outputParameters:
            - name: last_price
              type: string
              mapping: "$.data.lastPrice"
            - name: volume
              type: string
              mapping: "$.data.volume"
            - name: change_pct
              type: string
              mapping: "$.data.changePct"
  consumes:
    - type: http
      namespace: bloomberg
      baseUri: "https://bql.data.bloomberg.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_api_key"
      resources:
        - name: securities
          path: "/data/{{ticker}}"
          inputParameters:
            - name: ticker
              in: path
          operations:
            - name: get-security
              method: GET

Retrieves the latest Bloomberg news articles for a given topic or security. Returns headlines, timestamps, and article summaries for research analysts.

naftiko: "0.5"
info:
  label: "Bloomberg News Feed"
  description: "Retrieves the latest Bloomberg news articles for a given topic or security. Returns headlines, timestamps, and article summaries for research analysts."
  tags:
    - research
    - news
    - bloomberg-news
capability:
  exposes:
    - type: mcp
      namespace: research-news
      port: 8080
      tools:
        - name: get-bloomberg-news
          description: "Fetch latest Bloomberg news by topic or security."
          inputParameters:
            - name: topic
              in: body
              type: string
              description: "News topic or Bloomberg ticker."
          call: "bloomberg-news.search-articles"
          with:
            query: "{{topic}}"
          outputParameters:
            - name: articles
              type: array
              mapping: "$.articles"
  consumes:
    - type: http
      namespace: bloomberg-news
      baseUri: "https://bql.data.bloomberg.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_api_key"
      resources:
        - name: news
          path: "/news/search?query={{query}}"
          inputParameters:
            - name: query
              in: query
          operations:
            - name: search-articles
              method: GET

Analyzes resource utilization trends, forecasts capacity needs, creates procurement requests, and reports.

naftiko: "0.5"
info:
  label: "Capacity Planning Forecast Pipeline"
  description: "Analyzes resource utilization trends, forecasts capacity needs, creates procurement requests, and reports."
  tags:
    - infrastructure
    - grafana
    - snowflake
    - powerbi
capability:
  exposes:
    - type: mcp
      namespace: infrastructure
      port: 8080
      tools:
        - name: capacity_planning_forecast_pipeline
          description: "Orchestrate capacity planning forecast pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-grafana
              type: call
              call: "grafana.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                data: "{{get-grafana.result}}"
            - name: create-powerbi
              type: call
              call: "powerbi.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Capacity Planning Forecast Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: grafana
      baseUri: "https://barclays-grafana.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_api_key" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: grafana-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: powerbi-op
              method: POST

Orchestrates capital adequacy reporting by aggregating risk-weighted assets from Snowflake, computing capital ratios via Azure Databricks, generating the report in Power BI, uploading to SharePoint, and notifying the CFO office via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Capital Adequacy Report Pipeline"
  description: "Orchestrates capital adequacy reporting by aggregating risk-weighted assets from Snowflake, computing capital ratios via Azure Databricks, generating the report in Power BI, uploading to SharePoint, and notifying the CFO office via Microsoft Outlook."
  tags:
    - risk-management
    - capital-adequacy
    - snowflake
    - azure-databricks
    - power-bi
    - sharepoint
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: capital-reporting
      port: 8080
      tools:
        - name: generate-capital-report
          description: "Generate and distribute a capital adequacy report with ratio calculations."
          inputParameters:
            - name: reporting_date
              in: body
              type: string
              description: "Reporting date (YYYY-MM-DD)."
          steps:
            - name: get-rwa
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT risk_category, SUM(rwa) as total_rwa FROM risk.risk_weighted_assets WHERE as_of_date = '{{reporting_date}}' GROUP BY risk_category"
                warehouse: "RISK_WH"
                database: "RISK_DB"
            - name: compute-ratios
              type: call
              call: "databricks.run-job"
              with:
                job_id: "capital-ratio-calculator"
                parameters: "{\"reporting_date\":\"{{reporting_date}}\"}"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                group_id: "capital-reporting"
                dataset_id: "capital-adequacy"
            - name: upload-report
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "finance_reporting"
                folder_path: "Capital_Adequacy/{{reporting_date}}"
                file_name: "capital_adequacy_{{reporting_date}}.pdf"
            - name: notify-cfo
              type: call
              call: "outlook.send-mail"
              with:
                to: "cfo-office@barclays.com"
                subject: "Capital Adequacy Report - {{reporting_date}}"
                body: "CET1 Ratio: {{compute-ratios.cet1_ratio}}%. Tier 1: {{compute-ratios.tier1_ratio}}%. Total Capital: {{compute-ratios.total_capital_ratio}}%. Report: {{upload-report.url}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: databricks
      baseUri: "https://barclays.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: group_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST
    - type: http
      namespace: 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}}/{{file_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
            - name: file_name
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/finance-reporting@barclays.com/sendMail"
          operations:
            - name: send-mail
              method: POST

Validates change requests, routes for approval, schedules implementation, and notifies stakeholders.

naftiko: "0.5"
info:
  label: "Change Management Approval Pipeline"
  description: "Validates change requests, routes for approval, schedules implementation, and notifies stakeholders."
  tags:
    - itsm
    - servicenow
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: itsm
      port: 8080
      tools:
        - name: change_management_approval_pipeline
          description: "Orchestrate change management approval pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-servicenow
              type: call
              call: "servicenow.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-jira
              type: call
              call: "jira.process-resource"
              with:
                data: "{{get-servicenow.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Change Management Approval Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://barclays.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Identifies KYC records due for review, collects updated information, validates identity, and updates records.

naftiko: "0.5"
info:
  label: "Client KYC Refresh Pipeline"
  description: "Identifies KYC records due for review, collects updated information, validates identity, and updates records."
  tags:
    - compliance
    - salesforce
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: client_kyc_refresh_pipeline
          description: "Orchestrate client kyc refresh pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-salesforce
              type: call
              call: "salesforce.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                data: "{{get-salesforce.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Client KYC Refresh Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://barclays.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Orchestrates institutional client onboarding by creating the client in Salesforce, provisioning access in SailPoint, setting up document storage in Box, and sending welcome instructions via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Client Onboarding Orchestrator"
  description: "Orchestrates institutional client onboarding by creating the client in Salesforce, provisioning access in SailPoint, setting up document storage in Box, and sending welcome instructions via Microsoft Teams."
  tags:
    - client-onboarding
    - salesforce
    - sailpoint
    - box
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: client-onboarding
      port: 8080
      tools:
        - name: onboard-institutional-client
          description: "Onboard a new institutional client across CRM, identity, document storage, and communications."
          inputParameters:
            - name: client_name
              in: body
              type: string
              description: "Legal name of the client entity."
            - name: client_type
              in: body
              type: string
              description: "Client type (hedge_fund, pension, corporate, sovereign)."
            - name: relationship_manager
              in: body
              type: string
              description: "Email of the assigned relationship manager."
          steps:
            - name: create-account
              type: call
              call: "salesforce.create-account"
              with:
                name: "{{client_name}}"
                type: "{{client_type}}"
                owner_email: "{{relationship_manager}}"
            - name: provision-identity
              type: call
              call: "sailpoint.create-identity"
              with:
                name: "{{client_name}}"
                type: "service_account"
                source: "institutional_clients"
            - name: create-folder
              type: call
              call: "box.create-folder"
              with:
                parent_id: "0"
                name: "Client_{{create-account.id}}_{{client_name}}"
            - name: notify-rm
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{relationship_manager}}"
                text: "New client onboarded: {{client_name}} ({{client_type}}). Salesforce ID: {{create-account.id}}. Document folder: {{create-folder.url}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://barclays.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account"
          operations:
            - name: create-account
              method: POST
    - type: http
      namespace: sailpoint
      baseUri: "https://barclays.api.identitynow.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sailpoint_token"
      resources:
        - name: identities
          path: "/accounts"
          operations:
            - name: create-identity
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: folders
          path: "/folders"
          operations:
            - name: create-folder
              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

Orchestrates a wealth management suitability assessment by pulling client profile from Salesforce, risk questionnaire results from Oracle, running the suitability model on Azure Machine Learning, and storing the assessment in SharePoint.

naftiko: "0.5"
info:
  label: "Client Suitability Assessment"
  description: "Orchestrates a wealth management suitability assessment by pulling client profile from Salesforce, risk questionnaire results from Oracle, running the suitability model on Azure Machine Learning, and storing the assessment in SharePoint."
  tags:
    - wealth-management
    - suitability
    - salesforce
    - oracle-database
    - azure-machine-learning
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: wealth-suitability
      port: 8080
      tools:
        - name: assess-suitability
          description: "Run a suitability assessment for a wealth management client."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "Salesforce client account ID."
            - name: product_type
              in: body
              type: string
              description: "Investment product type being assessed."
          steps:
            - name: get-client
              type: call
              call: "salesforce.get-account"
              with:
                account_id: "{{client_id}}"
            - name: get-risk-questionnaire
              type: call
              call: "oracle.get-risk-questionnaire"
              with:
                client_id: "{{client_id}}"
            - name: run-suitability-model
              type: call
              call: "azure-ml.score-model"
              with:
                model_name: "suitability-assessor"
                input_data: "{\"client_type\":\"{{get-client.Type}}\",\"risk_tolerance\":\"{{get-risk-questionnaire.risk_tolerance}}\",\"investment_horizon\":\"{{get-risk-questionnaire.investment_horizon}}\",\"product_type\":\"{{product_type}}\"}"
            - name: store-assessment
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "wealth_management"
                folder_path: "Suitability/{{client_id}}"
                file_name: "suitability_{{product_type}}.json"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://barclays.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: oracle
      baseUri: "https://barclays-ords.db.oracle.com/ords/wealth/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_ords_token"
      resources:
        - name: risk-questionnaires
          path: "/risk-questionnaires/{{client_id}}"
          inputParameters:
            - name: client_id
              in: path
          operations:
            - name: get-risk-questionnaire
              method: GET
    - type: http
      namespace: azure-ml
      baseUri: "https://barclays-ml.westeurope.inference.ml.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_ml_token"
      resources:
        - name: scoring
          path: "/score"
          operations:
            - name: score-model
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
            - name: file_name
              in: path
          operations:
            - name: upload-file
              method: PUT

Collects audit events, validates against policies, generates compliance reports, and notifies auditors.

naftiko: "0.5"
info:
  label: "Compliance Audit Trail Pipeline"
  description: "Collects audit events, validates against policies, generates compliance reports, and notifies auditors."
  tags:
    - compliance
    - elasticsearch
    - confluence
    - slack
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: compliance_audit_trail_pipeline
          description: "Orchestrate compliance audit trail pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-elasticsearch
              type: call
              call: "elasticsearch.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-confluence
              type: call
              call: "confluence.process-resource"
              with:
                data: "{{get-elasticsearch.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Compliance Audit Trail Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: elasticsearch
      baseUri: "https://barclays-es.com:9200"
      authentication:
        type: bearer
        token: "$secrets.elasticsearch_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: elasticsearch-op
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://barclays.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: confluence-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Tracks spending against budgets, forecasts overruns, creates alerts, and notifies finance leaders.

naftiko: "0.5"
info:
  label: "Cost Center Budget Tracking Pipeline"
  description: "Tracks spending against budgets, forecasts overruns, creates alerts, and notifies finance leaders."
  tags:
    - finance
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: cost_center_budget_tracking
          description: "Orchestrate cost center budget tracking pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-powerbi
              type: call
              call: "powerbi.process-resource"
              with:
                data: "{{get-snowflake.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Cost Center Budget Tracking Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: powerbi-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Assesses counterparty credit risk by pulling entity data from Refinitiv, querying exposure from Snowflake, computing risk metrics via Azure Machine Learning, and filing the assessment in SharePoint.

naftiko: "0.5"
info:
  label: "Counterparty Risk Assessment"
  description: "Assesses counterparty credit risk by pulling entity data from Refinitiv, querying exposure from Snowflake, computing risk metrics via Azure Machine Learning, and filing the assessment in SharePoint."
  tags:
    - risk-management
    - counterparty-risk
    - refinitiv
    - snowflake
    - azure-machine-learning
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: counterparty-risk
      port: 8080
      tools:
        - name: assess-counterparty
          description: "Run a full counterparty risk assessment including exposure analysis and credit scoring."
          inputParameters:
            - name: counterparty_name
              in: body
              type: string
              description: "Legal name of the counterparty."
            - name: counterparty_lei
              in: body
              type: string
              description: "Legal Entity Identifier."
          steps:
            - name: screen-entity
              type: call
              call: "refinitiv.screen-entity"
              with:
                entity_name: "{{counterparty_name}}"
                entity_type: "organisation"
                lei: "{{counterparty_lei}}"
            - name: get-exposure
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT SUM(current_exposure) as total_exposure, SUM(potential_future_exposure) as pfe FROM risk.counterparty_exposure WHERE counterparty_lei = '{{counterparty_lei}}'"
                warehouse: "RISK_WH"
                database: "RISK_DB"
            - name: compute-risk
              type: call
              call: "azure-ml.score-model"
              with:
                model_name: "counterparty-risk-model"
                input_data: "{\"name\":\"{{counterparty_name}}\",\"lei\":\"{{counterparty_lei}}\",\"screening_result\":\"{{screen-entity.overallResult}}\",\"exposure\":\"{{get-exposure.total_exposure}}\"}"
            - name: store-assessment
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "risk_management"
                folder_path: "Counterparty_Assessments/{{counterparty_lei}}"
                file_name: "assessment_{{counterparty_lei}}.json"
  consumes:
    - type: http
      namespace: refinitiv
      baseUri: "https://rms-world-check-one-api-pilot.thomsonreuters.com/v2"
      authentication:
        type: bearer
        token: "$secrets.refinitiv_api_key"
      resources:
        - name: screening
          path: "/cases/screeningRequest"
          operations:
            - name: screen-entity
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: azure-ml
      baseUri: "https://barclays-ml.westeurope.inference.ml.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_ml_token"
      resources:
        - name: scoring
          path: "/score"
          operations:
            - name: score-model
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
            - name: file_name
              in: path
          operations:
            - name: upload-file
              method: PUT

Orchestrates credit risk scoring by pulling applicant data from Salesforce, running the credit model on Azure Databricks, storing results in Snowflake, and notifying the credit committee via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Credit Risk Model Scoring"
  description: "Orchestrates credit risk scoring by pulling applicant data from Salesforce, running the credit model on Azure Databricks, storing results in Snowflake, and notifying the credit committee via Microsoft Outlook."
  tags:
    - risk-management
    - credit-risk
    - salesforce
    - azure-databricks
    - snowflake
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: credit-risk
      port: 8080
      tools:
        - name: score-credit-risk
          description: "Run credit risk model scoring for a loan applicant."
          inputParameters:
            - name: applicant_id
              in: body
              type: string
              description: "Salesforce contact ID for the applicant."
            - name: loan_amount
              in: body
              type: string
              description: "Requested loan amount."
          steps:
            - name: get-applicant
              type: call
              call: "salesforce.get-contact"
              with:
                contact_id: "{{applicant_id}}"
            - name: run-model
              type: call
              call: "databricks.run-job"
              with:
                job_id: "credit-risk-scorer"
                parameters: "{\"name\":\"{{get-applicant.Name}}\",\"income\":\"{{get-applicant.Annual_Income__c}}\",\"loan_amount\":\"{{loan_amount}}\"}"
            - name: store-result
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "INSERT INTO credit.risk_scores (applicant_id, score, pd, lgd, timestamp) VALUES ('{{applicant_id}}', '{{run-model.score}}', '{{run-model.pd}}', '{{run-model.lgd}}', CURRENT_TIMESTAMP())"
                warehouse: "RISK_WH"
                database: "RISK_DB"
            - name: send-notification
              type: call
              call: "outlook.send-mail"
              with:
                to: "credit-committee@barclays.com"
                subject: "Credit Risk Score: {{get-applicant.Name}} - {{run-model.score}}"
                body: "Applicant: {{get-applicant.Name}}. Loan: {{loan_amount}}. PD: {{run-model.pd}}. LGD: {{run-model.lgd}}. Score: {{run-model.score}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://barclays.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact/{{contact_id}}"
          inputParameters:
            - name: contact_id
              in: path
          operations:
            - name: get-contact
              method: GET
    - type: http
      namespace: databricks
      baseUri: "https://barclays.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/credit-service@barclays.com/sendMail"
          operations:
            - name: send-mail
              method: POST

Collects applicant data, runs credit models, generates decisions, and notifies relationship managers.

naftiko: "0.5"
info:
  label: "Credit Scoring Pipeline"
  description: "Collects applicant data, runs credit models, generates decisions, and notifies relationship managers."
  tags:
    - lending
    - snowflake
    - salesforce
    - slack
capability:
  exposes:
    - type: mcp
      namespace: lending
      port: 8080
      tools:
        - name: credit_scoring_pipeline
          description: "Orchestrate credit scoring pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-salesforce
              type: call
              call: "salesforce.process-resource"
              with:
                data: "{{get-snowflake.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Credit Scoring Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://barclays.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Aggregates customer data from multiple sources, deduplicates, enriches profiles, and syncs to CRM.

naftiko: "0.5"
info:
  label: "Customer 360 Data Sync Pipeline"
  description: "Aggregates customer data from multiple sources, deduplicates, enriches profiles, and syncs to CRM."
  tags:
    - data
    - snowflake
    - salesforce
    - slack
capability:
  exposes:
    - type: mcp
      namespace: data
      port: 8080
      tools:
        - name: customer_360_data_sync_pipeline
          description: "Orchestrate customer 360 data sync pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-salesforce
              type: call
              call: "salesforce.process-resource"
              with:
                data: "{{get-snowflake.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Customer 360 Data Sync Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://barclays.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Runs data quality checks, scores datasets, creates remediation tickets, and publishes scorecards.

naftiko: "0.5"
info:
  label: "Data Quality Monitoring Pipeline"
  description: "Runs data quality checks, scores datasets, creates remediation tickets, and publishes scorecards."
  tags:
    - data-quality
    - snowflake
    - jira
    - grafana
capability:
  exposes:
    - type: mcp
      namespace: data-quality
      port: 8080
      tools:
        - name: data_quality_monitoring_pipeline
          description: "Orchestrate data quality monitoring pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-jira
              type: call
              call: "jira.process-resource"
              with:
                data: "{{get-snowflake.result}}"
            - name: create-grafana
              type: call
              call: "grafana.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Data Quality Monitoring Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://barclays.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira-op
              method: POST
    - type: http
      namespace: grafana
      baseUri: "https://barclays-grafana.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_api_key" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: grafana-op
              method: POST

Orchestrates a service health check by querying Datadog for active alerts, pulling recent error logs from Splunk, and posting a consolidated health summary to Microsoft Teams for the on-call team.

naftiko: "0.5"
info:
  label: "Datadog Service Health Dashboard"
  description: "Orchestrates a service health check by querying Datadog for active alerts, pulling recent error logs from Splunk, and posting a consolidated health summary to Microsoft Teams for the on-call team."
  tags:
    - operations
    - monitoring
    - datadog
    - splunk
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: service-health
      port: 8080
      tools:
        - name: check-service-health
          description: "Run a consolidated service health check across monitoring and logging systems."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "Service name to check."
          steps:
            - name: check-alerts
              type: call
              call: "datadog.search-monitors"
              with:
                query: "tag:service:{{service_name}} status:alert"
            - name: search-errors
              type: call
              call: "splunk.create-search"
              with:
                search: "index=applications service={{service_name}} level=ERROR earliest=-1h"
                earliest_time: "-1h"
                latest_time: "now"
            - name: post-summary
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "platform-engineering"
                channel_id: "service-health"
                text: "Service Health: {{service_name}}. Active alerts: {{check-alerts.total_count}}. Errors (1h): {{search-errors.result_count}}."
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.eu/api/v1"
      authentication:
        type: apiKey
        name: "DD-API-KEY"
        in: header
        value: "$secrets.datadog_api_key"
      resources:
        - name: monitors
          path: "/monitor/search"
          operations:
            - name: search-monitors
              method: GET
    - type: http
      namespace: splunk
      baseUri: "https://barclays-splunk.splunkcloud.com:8089"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search-jobs
          path: "/services/search/jobs"
          operations:
            - name: create-search
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Orchestrates a production deployment by triggering the GitHub Actions workflow, running smoke tests via Postman, checking Datadog health monitors, and posting the deployment result to Microsoft Teams.

naftiko: "0.5"
info:
  label: "Deployment Pipeline Orchestrator"
  description: "Orchestrates a production deployment by triggering the GitHub Actions workflow, running smoke tests via Postman, checking Datadog health monitors, and posting the deployment result to Microsoft Teams."
  tags:
    - devops
    - ci-cd
    - github-actions
    - postman
    - datadog
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: deployment-pipeline
      port: 8080
      tools:
        - name: deploy-to-production
          description: "Trigger a full production deployment with smoke tests, health checks, and team notification."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "GitHub repository (owner/repo)."
            - name: workflow_id
              in: body
              type: string
              description: "GitHub Actions workflow file name."
            - name: ref
              in: body
              type: string
              description: "Git ref to deploy (branch or tag)."
          steps:
            - name: trigger-deploy
              type: call
              call: "github.trigger-workflow"
              with:
                repo: "{{repo}}"
                workflow_id: "{{workflow_id}}"
                ref: "{{ref}}"
            - name: run-smoke-tests
              type: call
              call: "postman.run-collection"
              with:
                collection_id: "smoke-tests-production"
                environment: "production"
            - name: check-health
              type: call
              call: "datadog.search-monitors"
              with:
                query: "tag:service:{{repo}} status:alert"
            - name: notify-team
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "platform-engineering"
                channel_id: "deployments"
                text: "Deployment of {{repo}}@{{ref}} complete. Smoke tests: {{run-smoke-tests.status}}. Active alerts: {{check-health.total_count}}."
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflow-dispatches
          path: "/repos/{{repo}}/actions/workflows/{{workflow_id}}/dispatches"
          inputParameters:
            - name: repo
              in: path
            - name: workflow_id
              in: path
          operations:
            - name: trigger-workflow
              method: POST
    - type: http
      namespace: postman
      baseUri: "https://api.getpostman.com"
      authentication:
        type: apiKey
        name: "X-Api-Key"
        in: header
        value: "$secrets.postman_api_key"
      resources:
        - name: collection-runs
          path: "/collections/{{collection_id}}/runs"
          inputParameters:
            - name: collection_id
              in: path
          operations:
            - name: run-collection
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.eu/api/v1"
      authentication:
        type: apiKey
        name: "DD-API-KEY"
        in: header
        value: "$secrets.datadog_api_key"
      resources:
        - name: monitors
          path: "/monitor/search"
          operations:
            - name: search-monitors
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Tests DR procedures, validates backup integrity, generates readiness reports, and notifies leadership.

naftiko: "0.5"
info:
  label: "Disaster Recovery Readiness Pipeline"
  description: "Tests DR procedures, validates backup integrity, generates readiness reports, and notifies leadership."
  tags:
    - disaster-recovery
    - servicenow
    - confluence
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: disaster-recovery
      port: 8080
      tools:
        - name: disaster_recovery_readiness_pipeline
          description: "Orchestrate disaster recovery readiness pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-servicenow
              type: call
              call: "servicenow.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-confluence
              type: call
              call: "confluence.process-resource"
              with:
                data: "{{get-servicenow.result}}"
            - name: create-pagerduty
              type: call
              call: "pagerduty.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Disaster Recovery Readiness Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://barclays.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: confluence-op
              method: POST
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: pagerduty-op
              method: POST

Orchestrates employee offboarding by terminating Workday record, revoking access in SailPoint, deactivating Azure AD account, and creating a ServiceNow decommission ticket.

naftiko: "0.5"
info:
  label: "Employee Offboarding Orchestrator"
  description: "Orchestrates employee offboarding by terminating Workday record, revoking access in SailPoint, deactivating Azure AD account, and creating a ServiceNow decommission ticket."
  tags:
    - hr
    - offboarding
    - workday
    - sailpoint
    - azure-active-directory
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: hr-offboarding
      port: 8080
      tools:
        - name: offboard-employee
          description: "Orchestrate full employee offboarding across HR, identity, and IT systems."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "Workday worker ID."
            - name: termination_date
              in: body
              type: string
              description: "Last working date (YYYY-MM-DD)."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{worker_id}}"
            - name: revoke-access
              type: call
              call: "sailpoint.disable-identity"
              with:
                identity_id: "{{get-employee.sailpoint_id}}"
            - name: disable-ad
              type: call
              call: "azure-ad.disable-user"
              with:
                user_principal_name: "{{get-employee.work_email}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-record"
              with:
                table: "sc_request"
                short_description: "Offboarding: {{get-employee.full_name}} - equipment return and access cleanup"
                description: "Termination date: {{termination_date}}. Revoke all access and arrange equipment collection."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/barclays"
      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: sailpoint
      baseUri: "https://barclays.api.identitynow.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sailpoint_token"
      resources:
        - name: identities
          path: "/accounts/{{identity_id}}/disable"
          inputParameters:
            - name: identity_id
              in: path
          operations:
            - name: disable-identity
              method: POST
    - type: http
      namespace: azure-ad
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users/{{user_principal_name}}"
          inputParameters:
            - name: user_principal_name
              in: path
          operations:
            - name: disable-user
              method: PATCH
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: table-records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST

Provisions new employee accounts, assigns training, creates IT tickets, and notifies managers.

naftiko: "0.5"
info:
  label: "Employee Onboarding Automation Pipeline"
  description: "Provisions new employee accounts, assigns training, creates IT tickets, and notifies managers."
  tags:
    - hr
    - workday
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: employee_onboarding_automation
          description: "Orchestrate employee onboarding automation pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-workday
              type: call
              call: "workday.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                data: "{{get-workday.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Employee Onboarding Automation Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/barclays"
      authentication:
        type: bearer
        token: "$secrets.workday_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: workday-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Orchestrates end-of-day P&L aggregation by pulling trade data from Snowflake, computing PnL via Azure Databricks, updating Bloomberg AIM portfolio valuations, and distributing the PnL report to front office via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "End-of-Day PnL Aggregation"
  description: "Orchestrates end-of-day P&L aggregation by pulling trade data from Snowflake, computing PnL via Azure Databricks, updating Bloomberg AIM portfolio valuations, and distributing the PnL report to front office via Microsoft Outlook."
  tags:
    - trading
    - pnl
    - snowflake
    - azure-databricks
    - bloomberg-aim
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: eod-pnl
      port: 8080
      tools:
        - name: aggregate-eod-pnl
          description: "Run end-of-day PnL aggregation with reporting and distribution."
          inputParameters:
            - name: trading_date
              in: body
              type: string
              description: "Trading date (YYYY-MM-DD)."
            - name: desk
              in: body
              type: string
              description: "Trading desk identifier."
          steps:
            - name: get-trades
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT * FROM trading.trades WHERE trade_date = '{{trading_date}}' AND desk = '{{desk}}'"
                warehouse: "TRADING_WH"
                database: "TRADING_DB"
            - name: compute-pnl
              type: call
              call: "databricks.run-job"
              with:
                job_id: "eod-pnl-calculator"
                parameters: "{\"trading_date\":\"{{trading_date}}\",\"desk\":\"{{desk}}\"}"
            - name: update-valuations
              type: call
              call: "bloomberg-aim.update-valuations"
              with:
                desk: "{{desk}}"
                as_of_date: "{{trading_date}}"
                realized_pnl: "{{compute-pnl.realized_pnl}}"
                unrealized_pnl: "{{compute-pnl.unrealized_pnl}}"
            - name: send-report
              type: call
              call: "outlook.send-mail"
              with:
                to: "{{desk}}-desk@barclays.com"
                subject: "EOD PnL Report - {{desk}} - {{trading_date}}"
                body: "Realized PnL: {{compute-pnl.realized_pnl}}. Unrealized PnL: {{compute-pnl.unrealized_pnl}}. Total: {{compute-pnl.total_pnl}}. Trades: {{compute-pnl.trade_count}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: databricks
      baseUri: "https://barclays.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: bloomberg-aim
      baseUri: "https://aim.bloomberg.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_aim_token"
      resources:
        - name: valuations
          path: "/valuations"
          operations:
            - name: update-valuations
              method: PUT
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/trading-reports@barclays.com/sendMail"
          operations:
            - name: send-mail
              method: POST

Retrieves company financial summary data from FactSet for a given ticker, returning revenue, EPS, market cap, and P/E ratio for analyst research.

naftiko: "0.5"
info:
  label: "FactSet Company Financials Lookup"
  description: "Retrieves company financial summary data from FactSet for a given ticker, returning revenue, EPS, market cap, and P/E ratio for analyst research."
  tags:
    - research
    - market-data
    - factset
capability:
  exposes:
    - type: mcp
      namespace: research-data
      port: 8080
      tools:
        - name: get-company-financials
          description: "Fetch company financial summary from FactSet by ticker."
          inputParameters:
            - name: ticker
              in: body
              type: string
              description: "FactSet ticker identifier."
          call: "factset.get-fundamentals"
          with:
            ticker: "{{ticker}}"
          outputParameters:
            - name: revenue
              type: string
              mapping: "$.data.revenue"
            - name: eps
              type: string
              mapping: "$.data.eps"
            - name: market_cap
              type: string
              mapping: "$.data.marketCap"
            - name: pe_ratio
              type: string
              mapping: "$.data.peRatio"
  consumes:
    - type: http
      namespace: factset
      baseUri: "https://api.factset.com/content/factset-fundamentals/v2"
      authentication:
        type: basic
        username: "$secrets.factset_user"
        password: "$secrets.factset_password"
      resources:
        - name: fundamentals
          path: "/fundamentals?ids={{ticker}}"
          inputParameters:
            - name: ticker
              in: query
          operations:
            - name: get-fundamentals
              method: GET

Orchestrates a fixed income order by placing the order on Tradeweb, confirming execution, booking in Bloomberg AIM, and publishing the fill event to Apache Kafka for trade reporting.

naftiko: "0.5"
info:
  label: "Fixed Income Order Execution"
  description: "Orchestrates a fixed income order by placing the order on Tradeweb, confirming execution, booking in Bloomberg AIM, and publishing the fill event to Apache Kafka for trade reporting."
  tags:
    - trading
    - fixed-income
    - tradeweb
    - bloomberg-aim
    - apache-kafka
capability:
  exposes:
    - type: mcp
      namespace: fi-trading
      port: 8080
      tools:
        - name: execute-fi-order
          description: "Execute a fixed income order through placement, booking, and event publication."
          inputParameters:
            - name: security_id
              in: body
              type: string
              description: "Bond ISIN or identifier."
            - name: side
              in: body
              type: string
              description: "Order side (buy, sell)."
            - name: quantity
              in: body
              type: string
              description: "Face value / quantity."
            - name: portfolio_id
              in: body
              type: string
              description: "Target portfolio ID."
          steps:
            - name: place-order
              type: call
              call: "tradeweb.create-order"
              with:
                security_id: "{{security_id}}"
                side: "{{side}}"
                quantity: "{{quantity}}"
                order_type: "limit"
            - name: book-trade
              type: call
              call: "bloomberg-aim.create-order"
              with:
                portfolio_id: "{{portfolio_id}}"
                security: "{{security_id}}"
                side: "{{side}}"
                quantity: "{{quantity}}"
                price: "{{place-order.execution_price}}"
            - name: publish-fill
              type: call
              call: "kafka.produce"
              with:
                topic: "fi.trades.fills"
                key: "{{place-order.trade_id}}"
                value: "{\"tradeId\":\"{{place-order.trade_id}}\",\"security\":\"{{security_id}}\",\"side\":\"{{side}}\",\"quantity\":\"{{quantity}}\",\"price\":\"{{place-order.execution_price}}\"}"
  consumes:
    - type: http
      namespace: tradeweb
      baseUri: "https://api.tradeweb.com/v1"
      authentication:
        type: bearer
        token: "$secrets.tradeweb_api_key"
      resources:
        - name: orders
          path: "/orders"
          operations:
            - name: create-order
              method: POST
    - type: http
      namespace: bloomberg-aim
      baseUri: "https://aim.bloomberg.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_aim_token"
      resources:
        - name: orders
          path: "/orders"
          operations:
            - name: create-order
              method: POST
    - type: http
      namespace: kafka
      baseUri: "https://barclays-kafka.confluent.cloud/kafka/v3/clusters/barclays-prod"
      authentication:
        type: basic
        username: "$secrets.kafka_api_key"
        password: "$secrets.kafka_api_secret"
      resources:
        - name: records
          path: "/topics/{{topic}}/records"
          inputParameters:
            - name: topic
              in: path
          operations:
            - name: produce
              method: POST

When a fraud alert is raised, pulls transaction details from Oracle, screens the customer in Refinitiv, creates a ServiceNow incident, and escalates to the fraud team in Microsoft Teams with all enriched context.

naftiko: "0.5"
info:
  label: "Fraud Detection Alert Pipeline"
  description: "When a fraud alert is raised, pulls transaction details from Oracle, screens the customer in Refinitiv, creates a ServiceNow incident, and escalates to the fraud team in Microsoft Teams with all enriched context."
  tags:
    - fraud
    - security
    - oracle-database
    - refinitiv
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: fraud-detection
      port: 8080
      tools:
        - name: process-fraud-alert
          description: "Process a fraud detection alert with transaction enrichment and escalation."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "Fraud alert identifier."
            - name: transaction_id
              in: body
              type: string
              description: "Suspicious transaction reference."
          steps:
            - name: get-transaction
              type: call
              call: "oracle.get-transaction"
              with:
                transaction_id: "{{transaction_id}}"
            - name: screen-customer
              type: call
              call: "refinitiv.screen-entity"
              with:
                entity_name: "{{get-transaction.customer_name}}"
                entity_type: "individual"
            - name: create-incident
              type: call
              call: "servicenow.create-record"
              with:
                table: "incident"
                short_description: "Fraud Alert {{alert_id}} - {{get-transaction.customer_name}}"
                category: "fraud"
                priority: "1"
                description: "Transaction {{transaction_id}}: {{get-transaction.amount}} {{get-transaction.currency}}. Screening result: {{screen-customer.overallResult}}."
            - name: escalate
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "fraud-operations"
                channel_id: "alerts"
                text: "FRAUD ALERT {{alert_id}}: {{get-transaction.customer_name}} - {{get-transaction.amount}} {{get-transaction.currency}}. Screening: {{screen-customer.overallResult}}. Incident: {{create-incident.number}}."
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://barclays-ords.db.oracle.com/ords/payments/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_ords_token"
      resources:
        - name: transactions
          path: "/transactions/{{transaction_id}}"
          inputParameters:
            - name: transaction_id
              in: path
          operations:
            - name: get-transaction
              method: GET
    - type: http
      namespace: refinitiv
      baseUri: "https://rms-world-check-one-api-pilot.thomsonreuters.com/v2"
      authentication:
        type: bearer
        token: "$secrets.refinitiv_api_key"
      resources:
        - name: screening
          path: "/cases/screeningRequest"
          operations:
            - name: screen-entity
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: table-records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Orchestrates an FX spot trade from execution to confirmation by capturing the trade via Tradeweb, booking it in Bloomberg AIM, sending confirmation via Microsoft Outlook, and streaming the event to Apache Kafka for downstream consumers.

naftiko: "0.5"
info:
  label: "FX Trade Lifecycle"
  description: "Orchestrates an FX spot trade from execution to confirmation by capturing the trade via Tradeweb, booking it in Bloomberg AIM, sending confirmation via Microsoft Outlook, and streaming the event to Apache Kafka for downstream consumers."
  tags:
    - trading
    - fx
    - tradeweb
    - bloomberg-aim
    - microsoft-outlook
    - apache-kafka
capability:
  exposes:
    - type: mcp
      namespace: fx-trading
      port: 8080
      tools:
        - name: process-fx-trade
          description: "Process an FX spot trade through booking, confirmation, and event streaming."
          inputParameters:
            - name: trade_id
              in: body
              type: string
              description: "Tradeweb FX trade identifier."
            - name: counterparty_email
              in: body
              type: string
              description: "Counterparty confirmation email address."
          steps:
            - name: get-trade
              type: call
              call: "tradeweb.get-trade"
              with:
                trade_id: "{{trade_id}}"
            - name: book-trade
              type: call
              call: "bloomberg-aim.create-order"
              with:
                portfolio_id: "{{get-trade.portfolio_id}}"
                security: "{{get-trade.currency_pair}}"
                side: "{{get-trade.side}}"
                quantity: "{{get-trade.notional}}"
                price: "{{get-trade.rate}}"
            - name: send-confirmation
              type: call
              call: "outlook.send-mail"
              with:
                to: "{{counterparty_email}}"
                subject: "FX Trade Confirmation - {{trade_id}}"
                body: "Trade {{trade_id}}: {{get-trade.side}} {{get-trade.notional}} {{get-trade.currency_pair}} at {{get-trade.rate}}. Settlement: {{get-trade.settlement_date}}."
            - name: publish-event
              type: call
              call: "kafka.produce"
              with:
                topic: "fx.trades.completed"
                key: "{{trade_id}}"
                value: "{\"tradeId\":\"{{trade_id}}\",\"pair\":\"{{get-trade.currency_pair}}\",\"rate\":\"{{get-trade.rate}}\",\"notional\":\"{{get-trade.notional}}\"}"
  consumes:
    - type: http
      namespace: tradeweb
      baseUri: "https://api.tradeweb.com/v1"
      authentication:
        type: bearer
        token: "$secrets.tradeweb_api_key"
      resources:
        - name: trades
          path: "/trades/{{trade_id}}"
          inputParameters:
            - name: trade_id
              in: path
          operations:
            - name: get-trade
              method: GET
    - type: http
      namespace: bloomberg-aim
      baseUri: "https://aim.bloomberg.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_aim_token"
      resources:
        - name: orders
          path: "/orders"
          operations:
            - name: create-order
              method: POST
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/fx-confirmations@barclays.com/sendMail"
          operations:
            - name: send-mail
              method: POST
    - type: http
      namespace: kafka
      baseUri: "https://barclays-kafka.confluent.cloud/kafka/v3/clusters/barclays-prod"
      authentication:
        type: basic
        username: "$secrets.kafka_api_key"
        password: "$secrets.kafka_api_secret"
      resources:
        - name: records
          path: "/topics/{{topic}}/records"
          inputParameters:
            - name: topic
              in: path
          operations:
            - name: produce
              method: POST

Queries Geneos monitoring for the health status of a managed entity. Returns severity, component name, and active alert count.

naftiko: "0.5"
info:
  label: "Geneos System Health Status"
  description: "Queries Geneos monitoring for the health status of a managed entity. Returns severity, component name, and active alert count."
  tags:
    - operations
    - monitoring
    - geneos
capability:
  exposes:
    - type: mcp
      namespace: system-health
      port: 8080
      tools:
        - name: get-system-health
          description: "Check Geneos managed entity health status."
          inputParameters:
            - name: managed_entity
              in: body
              type: string
              description: "Geneos managed entity name."
          call: "geneos.get-entity-status"
          with:
            entity: "{{managed_entity}}"
          outputParameters:
            - name: severity
              type: string
              mapping: "$.entity.severity"
            - name: active_alerts
              type: string
              mapping: "$.entity.activeAlertCount"
  consumes:
    - type: http
      namespace: geneos
      baseUri: "https://barclays-geneos.internal.barclays.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.geneos_token"
      resources:
        - name: entities
          path: "/managedEntities/{{entity}}/status"
          inputParameters:
            - name: entity
              in: path
          operations:
            - name: get-entity-status
              method: GET

Compares deployed state against desired config, identifies drift, creates remediation tickets, and alerts ops.

naftiko: "0.5"
info:
  label: "Infrastructure Drift Detection Pipeline"
  description: "Compares deployed state against desired config, identifies drift, creates remediation tickets, and alerts ops."
  tags:
    - devops
    - github
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: devops
      port: 8080
      tools:
        - name: infrastructure_drift_detection
          description: "Orchestrate infrastructure drift detection pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-github
              type: call
              call: "github.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-jira
              type: call
              call: "jira.process-resource"
              with:
                data: "{{get-github.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Infrastructure Drift Detection Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: github-op
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://barclays.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Orchestrates an IRS trade by capturing terms from Tradeweb, booking in Bloomberg AIM, calculating initial margin via Azure Machine Learning, and dispatching the confirmation to the counterparty via IBM MQ.

naftiko: "0.5"
info:
  label: "Interest Rate Swap Lifecycle"
  description: "Orchestrates an IRS trade by capturing terms from Tradeweb, booking in Bloomberg AIM, calculating initial margin via Azure Machine Learning, and dispatching the confirmation to the counterparty via IBM MQ."
  tags:
    - trading
    - derivatives
    - tradeweb
    - bloomberg-aim
    - azure-machine-learning
    - ibm-mq
capability:
  exposes:
    - type: mcp
      namespace: derivatives-trading
      port: 8080
      tools:
        - name: process-irs-trade
          description: "Process an interest rate swap from execution through margin calculation and confirmation."
          inputParameters:
            - name: trade_id
              in: body
              type: string
              description: "Tradeweb IRS trade identifier."
          steps:
            - name: get-trade
              type: call
              call: "tradeweb.get-trade"
              with:
                trade_id: "{{trade_id}}"
            - name: book-swap
              type: call
              call: "bloomberg-aim.create-order"
              with:
                portfolio_id: "{{get-trade.portfolio_id}}"
                security: "{{get-trade.swap_identifier}}"
                side: "{{get-trade.side}}"
                quantity: "{{get-trade.notional}}"
                price: "{{get-trade.fixed_rate}}"
            - name: calc-margin
              type: call
              call: "azure-ml.score-model"
              with:
                model_name: "initial-margin-calculator"
                input_data: "{\"notional\":\"{{get-trade.notional}}\",\"fixed_rate\":\"{{get-trade.fixed_rate}}\",\"tenor\":\"{{get-trade.tenor}}\",\"currency\":\"{{get-trade.currency}}\"}"
            - name: send-confirmation
              type: call
              call: "ibmmq.send-message"
              with:
                queue: "DERIVATIVES.CONFIRMATIONS.OUT"
                body: "{\"tradeId\":\"{{trade_id}}\",\"type\":\"IRS\",\"notional\":\"{{get-trade.notional}}\",\"fixedRate\":\"{{get-trade.fixed_rate}}\",\"floatingIndex\":\"{{get-trade.floating_index}}\",\"initialMargin\":\"{{calc-margin.margin_amount}}\"}"
  consumes:
    - type: http
      namespace: tradeweb
      baseUri: "https://api.tradeweb.com/v1"
      authentication:
        type: bearer
        token: "$secrets.tradeweb_api_key"
      resources:
        - name: trades
          path: "/trades/{{trade_id}}"
          inputParameters:
            - name: trade_id
              in: path
          operations:
            - name: get-trade
              method: GET
    - type: http
      namespace: bloomberg-aim
      baseUri: "https://aim.bloomberg.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_aim_token"
      resources:
        - name: orders
          path: "/orders"
          operations:
            - name: create-order
              method: POST
    - type: http
      namespace: azure-ml
      baseUri: "https://barclays-ml.westeurope.inference.ml.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_ml_token"
      resources:
        - name: scoring
          path: "/score"
          operations:
            - name: score-model
              method: POST
    - type: http
      namespace: ibmmq
      baseUri: "https://barclays-mq.ibm.com/ibmmq/rest/v2"
      authentication:
        type: basic
        username: "$secrets.ibmmq_user"
        password: "$secrets.ibmmq_password"
      resources:
        - name: messages
          path: "/messaging/qmgr/BARCMQ01/queue/{{queue}}/message"
          inputParameters:
            - name: queue
              in: path
          operations:
            - name: send-message
              method: POST

Tracks asset lifecycle stages, schedules replacements, manages disposal, and updates CMDB.

naftiko: "0.5"
info:
  label: "IT Asset Lifecycle Pipeline"
  description: "Tracks asset lifecycle stages, schedules replacements, manages disposal, and updates CMDB."
  tags:
    - operations
    - servicenow
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: operations
      port: 8080
      tools:
        - name: it_asset_lifecycle_pipeline
          description: "Orchestrate it asset lifecycle pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-servicenow
              type: call
              call: "servicenow.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                data: "{{get-servicenow.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "IT Asset Lifecycle Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Retrieves the latest build status for a Jenkins job. Returns build number, result, duration, and timestamp.

naftiko: "0.5"
info:
  label: "Jenkins Build Status Check"
  description: "Retrieves the latest build status for a Jenkins job. Returns build number, result, duration, and timestamp."
  tags:
    - devops
    - ci-cd
    - jenkins
capability:
  exposes:
    - type: mcp
      namespace: ci-monitoring
      port: 8080
      tools:
        - name: get-build-status
          description: "Check the latest Jenkins build status for a job."
          inputParameters:
            - name: job_name
              in: body
              type: string
              description: "Jenkins job name (can include folder path)."
          call: "jenkins.get-last-build"
          with:
            job_name: "{{job_name}}"
          outputParameters:
            - name: build_number
              type: string
              mapping: "$.number"
            - name: result
              type: string
              mapping: "$.result"
            - name: duration
              type: string
              mapping: "$.duration"
  consumes:
    - type: http
      namespace: jenkins
      baseUri: "https://jenkins.barclays.com"
      authentication:
        type: basic
        username: "$secrets.jenkins_user"
        password: "$secrets.jenkins_api_token"
      resources:
        - name: builds
          path: "/job/{{job_name}}/lastBuild/api/json"
          inputParameters:
            - name: job_name
              in: path
          operations:
            - name: get-last-build
              method: GET

Retrieves a Jira issue from the compliance project by key, returning summary, status, assignee, and due date.

naftiko: "0.5"
info:
  label: "Jira Compliance Task Lookup"
  description: "Retrieves a Jira issue from the compliance project by key, returning summary, status, assignee, and due date."
  tags:
    - compliance
    - project-management
    - jira
capability:
  exposes:
    - type: mcp
      namespace: compliance-tasks
      port: 8080
      tools:
        - name: get-compliance-task
          description: "Look up a Jira compliance task by issue key."
          inputParameters:
            - name: issue_key
              in: body
              type: string
              description: "Jira issue key (e.g. COMP-1234)."
          call: "jira.get-issue"
          with:
            issue_key: "{{issue_key}}"
          outputParameters:
            - name: summary
              type: string
              mapping: "$.fields.summary"
            - name: status
              type: string
              mapping: "$.fields.status.name"
            - name: assignee
              type: string
              mapping: "$.fields.assignee.displayName"
            - name: due_date
              type: string
              mapping: "$.fields.duedate"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://barclays.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue/{{issue_key}}"
          inputParameters:
            - name: issue_key
              in: path
          operations:
            - name: get-issue
              method: GET

Orchestrates publishing enriched trade events to Apache Kafka by pulling trade details from Tradeweb, enriching with Bloomberg market data, and producing the composite event to the trade events topic.

naftiko: "0.5"
info:
  label: "Kafka Trade Event Stream Publishing"
  description: "Orchestrates publishing enriched trade events to Apache Kafka by pulling trade details from Tradeweb, enriching with Bloomberg market data, and producing the composite event to the trade events topic."
  tags:
    - trading
    - event-streaming
    - tradeweb
    - bloomberg-enterprise-data
    - apache-kafka
capability:
  exposes:
    - type: mcp
      namespace: trade-events
      port: 8080
      tools:
        - name: publish-enriched-trade-event
          description: "Enrich a trade with market data and publish to the Kafka trade events stream."
          inputParameters:
            - name: trade_id
              in: body
              type: string
              description: "Tradeweb trade identifier."
          steps:
            - name: get-trade
              type: call
              call: "tradeweb.get-trade"
              with:
                trade_id: "{{trade_id}}"
            - name: get-market-data
              type: call
              call: "bloomberg.get-security"
              with:
                ticker: "{{get-trade.security}}"
            - name: publish-event
              type: call
              call: "kafka.produce"
              with:
                topic: "trades.enriched"
                key: "{{trade_id}}"
                value: "{\"tradeId\":\"{{trade_id}}\",\"security\":\"{{get-trade.security}}\",\"notional\":\"{{get-trade.notional}}\",\"lastPrice\":\"{{get-market-data.lastPrice}}\",\"volume\":\"{{get-market-data.volume}}\"}"
  consumes:
    - type: http
      namespace: tradeweb
      baseUri: "https://api.tradeweb.com/v1"
      authentication:
        type: bearer
        token: "$secrets.tradeweb_api_key"
      resources:
        - name: trades
          path: "/trades/{{trade_id}}"
          inputParameters:
            - name: trade_id
              in: path
          operations:
            - name: get-trade
              method: GET
    - type: http
      namespace: bloomberg
      baseUri: "https://bql.data.bloomberg.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_api_key"
      resources:
        - name: securities
          path: "/data/{{ticker}}"
          inputParameters:
            - name: ticker
              in: path
          operations:
            - name: get-security
              method: GET
    - type: http
      namespace: kafka
      baseUri: "https://barclays-kafka.confluent.cloud/kafka/v3/clusters/barclays-prod"
      authentication:
        type: basic
        username: "$secrets.kafka_api_key"
        password: "$secrets.kafka_api_secret"
      resources:
        - name: records
          path: "/topics/{{topic}}/records"
          inputParameters:
            - name: topic
              in: path
          operations:
            - name: produce
              method: POST

Identifies stale articles, assigns review tasks, tracks updates, and publishes freshness reports.

naftiko: "0.5"
info:
  label: "Knowledge Base Freshness Pipeline"
  description: "Identifies stale articles, assigns review tasks, tracks updates, and publishes freshness reports."
  tags:
    - knowledge
    - confluence
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: knowledge
      port: 8080
      tools:
        - name: knowledge_base_freshness_pipeline
          description: "Orchestrate knowledge base freshness pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-confluence
              type: call
              call: "confluence.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-jira
              type: call
              call: "jira.process-resource"
              with:
                data: "{{get-confluence.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Knowledge Base Freshness Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://barclays.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: confluence-op
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://barclays.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Orchestrates customer identity verification during onboarding by pulling customer data from Salesforce, running sanctions screening via Refinitiv World-Check, and logging the verification result in ServiceNow for audit trail.

naftiko: "0.5"
info:
  label: "KYC Customer Identity Verification"
  description: "Orchestrates customer identity verification during onboarding by pulling customer data from Salesforce, running sanctions screening via Refinitiv World-Check, and logging the verification result in ServiceNow for audit trail."
  tags:
    - kyc
    - compliance
    - salesforce
    - refinitiv
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: kyc-verification
      port: 8080
      tools:
        - name: verify-customer-identity
          description: "Run full KYC identity verification for a customer, including sanctions screening and audit logging."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The Salesforce customer account ID."
          steps:
            - name: fetch-customer
              type: call
              call: "salesforce.get-account"
              with:
                account_id: "{{customer_id}}"
            - name: screen-sanctions
              type: call
              call: "refinitiv.screen-entity"
              with:
                entity_name: "{{fetch-customer.Name}}"
                entity_type: "individual"
                date_of_birth: "{{fetch-customer.PersonBirthdate}}"
            - name: log-result
              type: call
              call: "servicenow.create-record"
              with:
                table: "u_kyc_verification"
                short_description: "KYC screening for {{fetch-customer.Name}}"
                result: "{{screen-sanctions.overallResult}}"
                risk_score: "{{screen-sanctions.riskScore}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://barclays.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: refinitiv
      baseUri: "https://rms-world-check-one-api-pilot.thomsonreuters.com/v2"
      authentication:
        type: bearer
        token: "$secrets.refinitiv_api_key"
      resources:
        - name: screening
          path: "/cases/screeningRequest"
          operations:
            - name: screen-entity
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: table-records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST

Orchestrates daily LCR monitoring by pulling HQLA positions from Snowflake, net cash outflows from Oracle, computing the ratio via Azure Databricks, and alerting treasury via Microsoft Teams if below threshold.

naftiko: "0.5"
info:
  label: "Liquidity Coverage Ratio Monitoring"
  description: "Orchestrates daily LCR monitoring by pulling HQLA positions from Snowflake, net cash outflows from Oracle, computing the ratio via Azure Databricks, and alerting treasury via Microsoft Teams if below threshold."
  tags:
    - risk-management
    - liquidity
    - snowflake
    - oracle-database
    - azure-databricks
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: liquidity-risk
      port: 8080
      tools:
        - name: monitor-lcr
          description: "Compute and monitor the Liquidity Coverage Ratio with threshold alerting."
          inputParameters:
            - name: reporting_date
              in: body
              type: string
              description: "Reporting date (YYYY-MM-DD)."
            - name: threshold_pct
              in: body
              type: string
              description: "Alert threshold percentage (e.g. 100)."
          steps:
            - name: get-hqla
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT SUM(market_value) as hqla_total FROM treasury.hqla_positions WHERE as_of_date = '{{reporting_date}}'"
                warehouse: "TREASURY_WH"
                database: "TREASURY_DB"
            - name: get-outflows
              type: call
              call: "oracle.get-cash-outflows"
              with:
                reporting_date: "{{reporting_date}}"
            - name: compute-lcr
              type: call
              call: "databricks.run-job"
              with:
                job_id: "lcr-calculator"
                parameters: "{\"hqla\":\"{{get-hqla.hqla_total}}\",\"net_outflows\":\"{{get-outflows.net_outflow_total}}\",\"threshold\":\"{{threshold_pct}}\"}"
            - name: alert-treasury
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "treasury"
                channel_id: "liquidity-monitoring"
                text: "LCR Report {{reporting_date}}: HQLA {{get-hqla.hqla_total}}, Net Outflows {{get-outflows.net_outflow_total}}, LCR {{compute-lcr.lcr_ratio}}%. Threshold: {{threshold_pct}}%. Status: {{compute-lcr.breach_status}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: oracle
      baseUri: "https://barclays-ords.db.oracle.com/ords/treasury/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_ords_token"
      resources:
        - name: cash-outflows
          path: "/cash-outflows/{{reporting_date}}"
          inputParameters:
            - name: reporting_date
              in: path
          operations:
            - name: get-cash-outflows
              method: GET
    - type: http
      namespace: databricks
      baseUri: "https://barclays.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Orchestrates a new loan application by creating the application in Salesforce, running credit checks via Refinitiv, generating risk documents in SharePoint, and notifying the lending team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Loan Origination Workflow"
  description: "Orchestrates a new loan application by creating the application in Salesforce, running credit checks via Refinitiv, generating risk documents in SharePoint, and notifying the lending team via Microsoft Teams."
  tags:
    - lending
    - loan-origination
    - salesforce
    - refinitiv
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: lending-origination
      port: 8080
      tools:
        - name: initiate-loan-application
          description: "Create and process a new loan application through credit check, document provisioning, and team notification."
          inputParameters:
            - name: applicant_name
              in: body
              type: string
              description: "Full name of the loan applicant."
            - name: loan_amount
              in: body
              type: string
              description: "Requested loan amount."
            - name: loan_currency
              in: body
              type: string
              description: "Currency code (e.g. GBP, USD)."
            - name: loan_type
              in: body
              type: string
              description: "Type of loan (mortgage, corporate, personal)."
          steps:
            - name: create-application
              type: call
              call: "salesforce.create-opportunity"
              with:
                name: "Loan - {{applicant_name}} - {{loan_amount}} {{loan_currency}}"
                stage: "Application Received"
                amount: "{{loan_amount}}"
                type: "{{loan_type}}"
            - name: credit-check
              type: call
              call: "refinitiv.screen-entity"
              with:
                entity_name: "{{applicant_name}}"
                entity_type: "individual"
                check_type: "credit"
            - name: provision-docs
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "lending_applications"
                folder_path: "Applications/{{create-application.id}}_{{applicant_name}}"
            - name: notify-team
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "lending-approvals"
                channel_id: "new-applications"
                text: "New {{loan_type}} loan application: {{applicant_name}} for {{loan_amount}} {{loan_currency}}. Credit score: {{credit-check.creditScore}}. Docs: {{provision-docs.url}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://barclays.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity"
          operations:
            - name: create-opportunity
              method: POST
    - type: http
      namespace: refinitiv
      baseUri: "https://rms-world-check-one-api-pilot.thomsonreuters.com/v2"
      authentication:
        type: bearer
        token: "$secrets.refinitiv_api_key"
      resources:
        - name: screening
          path: "/cases/screeningRequest"
          operations:
            - name: screen-entity
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Orchestrates margin call processing by computing margin requirements from Snowflake, generating the call notice in SharePoint, dispatching to the counterparty via IBM MQ, and creating a follow-up task in Jira for collateral management.

naftiko: "0.5"
info:
  label: "Margin Call Processing"
  description: "Orchestrates margin call processing by computing margin requirements from Snowflake, generating the call notice in SharePoint, dispatching to the counterparty via IBM MQ, and creating a follow-up task in Jira for collateral management."
  tags:
    - trading
    - margin-calls
    - snowflake
    - sharepoint
    - ibm-mq
    - jira
capability:
  exposes:
    - type: mcp
      namespace: margin-management
      port: 8080
      tools:
        - name: process-margin-call
          description: "Compute margin requirements, generate notice, dispatch to counterparty, and track follow-up."
          inputParameters:
            - name: counterparty_lei
              in: body
              type: string
              description: "Counterparty Legal Entity Identifier."
            - name: valuation_date
              in: body
              type: string
              description: "Valuation date (YYYY-MM-DD)."
          steps:
            - name: compute-margin
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT counterparty_lei, SUM(mtm_value) as portfolio_mtm, SUM(collateral_value) as collateral_held, SUM(mtm_value) - SUM(collateral_value) as margin_shortfall FROM risk.counterparty_positions WHERE counterparty_lei = '{{counterparty_lei}}' AND valuation_date = '{{valuation_date}}' GROUP BY counterparty_lei"
                warehouse: "RISK_WH"
                database: "RISK_DB"
            - name: generate-notice
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "collateral_management"
                folder_path: "Margin_Calls/{{counterparty_lei}}/{{valuation_date}}"
                file_name: "margin_call_{{counterparty_lei}}_{{valuation_date}}.json"
            - name: dispatch-notice
              type: call
              call: "ibmmq.send-message"
              with:
                queue: "MARGIN.CALLS.OUT"
                body: "{\"lei\":\"{{counterparty_lei}}\",\"valuationDate\":\"{{valuation_date}}\",\"shortfall\":\"{{compute-margin.margin_shortfall}}\",\"portfolioMtm\":\"{{compute-margin.portfolio_mtm}}\"}"
            - name: create-follow-up
              type: call
              call: "jira.create-issue"
              with:
                project: "COLL"
                issue_type: "Task"
                summary: "Margin Call: {{counterparty_lei}} - shortfall {{compute-margin.margin_shortfall}}"
                description: "Margin call dispatched for {{valuation_date}}. Portfolio MTM: {{compute-margin.portfolio_mtm}}. Collateral held: {{compute-margin.collateral_held}}. Shortfall: {{compute-margin.margin_shortfall}}."
                priority: "High"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: 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}}/{{file_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
            - name: file_name
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: ibmmq
      baseUri: "https://barclays-mq.ibm.com/ibmmq/rest/v2"
      authentication:
        type: basic
        username: "$secrets.ibmmq_user"
        password: "$secrets.ibmmq_password"
      resources:
        - name: messages
          path: "/messaging/qmgr/BARCMQ01/queue/{{queue}}/message"
          inputParameters:
            - name: queue
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://barclays.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Monitors portfolio exposures, calculates VaR, detects limit breaches, and alerts risk management.

naftiko: "0.5"
info:
  label: "Market Risk Monitoring Pipeline"
  description: "Monitors portfolio exposures, calculates VaR, detects limit breaches, and alerts risk management."
  tags:
    - risk
    - snowflake
    - grafana
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: risk
      port: 8080
      tools:
        - name: market_risk_monitoring_pipeline
          description: "Orchestrate market risk monitoring pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-grafana
              type: call
              call: "grafana.process-resource"
              with:
                data: "{{get-snowflake.result}}"
            - name: create-pagerduty
              type: call
              call: "pagerduty.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Market Risk Monitoring Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: grafana
      baseUri: "https://barclays-grafana.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_api_key" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: grafana-op
              method: POST
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: pagerduty-op
              method: POST

Orchestrates a Value-at-Risk calculation by pulling positions from Bloomberg AIM, computing VaR via Azure Databricks, storing results in Snowflake, and sending a breach alert to Microsoft Teams if the limit is exceeded.

naftiko: "0.5"
info:
  label: "Market Risk VaR Calculation Pipeline"
  description: "Orchestrates a Value-at-Risk calculation by pulling positions from Bloomberg AIM, computing VaR via Azure Databricks, storing results in Snowflake, and sending a breach alert to Microsoft Teams if the limit is exceeded."
  tags:
    - risk-management
    - var
    - bloomberg-aim
    - azure-databricks
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: market-risk
      port: 8080
      tools:
        - name: calculate-var
          description: "Run Value-at-Risk calculation for a trading book and alert on breaches."
          inputParameters:
            - name: book_id
              in: body
              type: string
              description: "Trading book identifier."
            - name: confidence_level
              in: body
              type: string
              description: "VaR confidence level (e.g. 99, 95)."
            - name: horizon_days
              in: body
              type: string
              description: "Holding period in days."
          steps:
            - name: get-positions
              type: call
              call: "bloomberg-aim.get-positions"
              with:
                portfolio_id: "{{book_id}}"
            - name: compute-var
              type: call
              call: "databricks.run-job"
              with:
                job_id: "var-calculator"
                parameters: "{\"positions\":{{get-positions.holdings}},\"confidence\":\"{{confidence_level}}\",\"horizon\":\"{{horizon_days}}\"}"
            - name: store-result
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "INSERT INTO risk.var_results (book_id, var_amount, confidence, horizon, calc_date) VALUES ('{{book_id}}', '{{compute-var.var_amount}}', '{{confidence_level}}', '{{horizon_days}}', CURRENT_DATE())"
                warehouse: "RISK_WH"
                database: "RISK_DB"
            - name: alert-breach
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "market-risk"
                channel_id: "var-alerts"
                text: "VaR Report - Book {{book_id}}: {{compute-var.var_amount}} ({{confidence_level}}% / {{horizon_days}}d). Limit utilization: {{compute-var.limit_utilization}}%."
  consumes:
    - type: http
      namespace: bloomberg-aim
      baseUri: "https://aim.bloomberg.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_aim_token"
      resources:
        - name: positions
          path: "/portfolios/{{portfolio_id}}/positions"
          inputParameters:
            - name: portfolio_id
              in: path
          operations:
            - name: get-positions
              method: GET
    - type: http
      namespace: databricks
      baseUri: "https://barclays.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Checks the status of a Mastercard payment transaction by reference ID. Returns authorization status, amount, and settlement state.

naftiko: "0.5"
info:
  label: "Mastercard Payment Gateway Status"
  description: "Checks the status of a Mastercard payment transaction by reference ID. Returns authorization status, amount, and settlement state."
  tags:
    - payments
    - card-processing
    - mastercard
capability:
  exposes:
    - type: mcp
      namespace: card-payments
      port: 8080
      tools:
        - name: get-payment-status
          description: "Check a Mastercard payment transaction status."
          inputParameters:
            - name: transaction_ref
              in: body
              type: string
              description: "Mastercard transaction reference."
          call: "mastercard.get-transaction"
          with:
            transaction_ref: "{{transaction_ref}}"
          outputParameters:
            - name: auth_status
              type: string
              mapping: "$.transaction.authorizationStatus"
            - name: amount
              type: string
              mapping: "$.transaction.amount"
            - name: settlement_status
              type: string
              mapping: "$.transaction.settlementStatus"
  consumes:
    - type: http
      namespace: mastercard
      baseUri: "https://sandbox.api.mastercard.com/mcob/v1"
      authentication:
        type: oauth2
        token: "$secrets.mastercard_oauth_token"
      resources:
        - name: transactions
          path: "/transactions/{{transaction_ref}}"
          inputParameters:
            - name: transaction_ref
              in: path
          operations:
            - name: get-transaction
              method: GET

Orchestrates a threat investigation in Microsoft Sentinel by querying for incidents, enriching with SailPoint identity data, creating a ServiceNow security incident, and alerting the SOC team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Microsoft Sentinel Threat Investigation"
  description: "Orchestrates a threat investigation in Microsoft Sentinel by querying for incidents, enriching with SailPoint identity data, creating a ServiceNow security incident, and alerting the SOC team via Microsoft Teams."
  tags:
    - security
    - threat-detection
    - microsoft-sentinel
    - sailpoint
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: threat-investigation
      port: 8080
      tools:
        - name: investigate-threat
          description: "Investigate a Microsoft Sentinel security incident with identity enrichment and escalation."
          inputParameters:
            - name: incident_id
              in: body
              type: string
              description: "Microsoft Sentinel incident ID."
          steps:
            - name: get-incident
              type: call
              call: "sentinel.get-incident"
              with:
                incident_id: "{{incident_id}}"
            - name: get-identity
              type: call
              call: "sailpoint.get-identity"
              with:
                identity_name: "{{get-incident.owner.assignedTo}}"
            - name: create-security-incident
              type: call
              call: "servicenow.create-record"
              with:
                table: "sn_si_incident"
                short_description: "Sentinel Alert: {{get-incident.properties.title}}"
                severity: "{{get-incident.properties.severity}}"
                description: "Sentinel incident {{incident_id}}: {{get-incident.properties.description}}. Affected user: {{get-identity.displayName}} ({{get-identity.department}})."
            - name: alert-soc
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "security-operations"
                channel_id: "incidents"
                text: "Sentinel Incident {{incident_id}}: {{get-incident.properties.title}}. Severity: {{get-incident.properties.severity}}. ServiceNow: {{create-security-incident.number}}."
  consumes:
    - type: http
      namespace: sentinel
      baseUri: "https://management.azure.com/subscriptions/barclays-sub/resourceGroups/security-rg/providers/Microsoft.SecurityInsights"
      authentication:
        type: bearer
        token: "$secrets.azure_mgmt_token"
      resources:
        - name: incidents
          path: "/incidents/{{incident_id}}?api-version=2023-11-01"
          inputParameters:
            - name: incident_id
              in: path
          operations:
            - name: get-incident
              method: GET
    - type: http
      namespace: sailpoint
      baseUri: "https://barclays.api.identitynow.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sailpoint_token"
      resources:
        - name: identities
          path: "/search/identities?query=name:{{identity_name}}"
          inputParameters:
            - name: identity_name
              in: query
          operations:
            - name: get-identity
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: table-records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Orchestrates operational risk event recording by creating the event in ServiceNow, storing supporting evidence in Box, computing the risk impact via Azure Databricks, and notifying the operational risk committee via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Operational Risk Event Capture"
  description: "Orchestrates operational risk event recording by creating the event in ServiceNow, storing supporting evidence in Box, computing the risk impact via Azure Databricks, and notifying the operational risk committee via Microsoft Outlook."
  tags:
    - risk-management
    - operational-risk
    - servicenow
    - box
    - azure-databricks
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: oprisk-management
      port: 8080
      tools:
        - name: record-oprisk-event
          description: "Record an operational risk event with evidence collection, impact assessment, and committee notification."
          inputParameters:
            - name: event_description
              in: body
              type: string
              description: "Description of the operational risk event."
            - name: business_unit
              in: body
              type: string
              description: "Affected business unit."
            - name: estimated_loss
              in: body
              type: string
              description: "Estimated financial loss."
            - name: currency
              in: body
              type: string
              description: "Loss currency."
          steps:
            - name: create-event
              type: call
              call: "servicenow.create-record"
              with:
                table: "u_oprisk_events"
                short_description: "OpRisk Event: {{business_unit}} - {{estimated_loss}} {{currency}}"
                description: "{{event_description}}"
                category: "operational_risk"
            - name: create-evidence-folder
              type: call
              call: "box.create-folder"
              with:
                parent_id: "oprisk_evidence"
                name: "Event_{{create-event.sys_id}}"
            - name: assess-impact
              type: call
              call: "databricks.run-job"
              with:
                job_id: "oprisk-impact-assessor"
                parameters: "{\"estimated_loss\":\"{{estimated_loss}}\",\"currency\":\"{{currency}}\",\"business_unit\":\"{{business_unit}}\"}"
            - name: notify-committee
              type: call
              call: "outlook.send-mail"
              with:
                to: "oprisk-committee@barclays.com"
                subject: "OpRisk Event: {{business_unit}} - {{estimated_loss}} {{currency}}"
                body: "Event: {{event_description}}. Estimated loss: {{estimated_loss}} {{currency}}. Risk category: {{assess-impact.risk_category}}. Capital impact: {{assess-impact.capital_impact}}. ServiceNow: {{create-event.number}}."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: table-records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: folders
          path: "/folders"
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: databricks
      baseUri: "https://barclays.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/oprisk-reporting@barclays.com/sendMail"
          operations:
            - name: send-mail
              method: POST

Orchestrates an international payment by validating the beneficiary in Oracle Database, formatting a SWIFT MT103 message, dispatching via IBM MQ, and logging the payment event to Splunk for monitoring.

naftiko: "0.5"
info:
  label: "Payment Processing SWIFT Dispatch"
  description: "Orchestrates an international payment by validating the beneficiary in Oracle Database, formatting a SWIFT MT103 message, dispatching via IBM MQ, and logging the payment event to Splunk for monitoring."
  tags:
    - payments
    - swift
    - oracle-database
    - ibm-mq
    - splunk
capability:
  exposes:
    - type: mcp
      namespace: payments-processing
      port: 8080
      tools:
        - name: dispatch-swift-payment
          description: "Validate, format, and dispatch a SWIFT MT103 international payment with audit logging."
          inputParameters:
            - name: payment_ref
              in: body
              type: string
              description: "Internal payment reference."
            - name: beneficiary_account
              in: body
              type: string
              description: "Beneficiary account number."
            - name: amount
              in: body
              type: string
              description: "Payment amount."
            - name: currency
              in: body
              type: string
              description: "ISO currency code."
            - name: beneficiary_bic
              in: body
              type: string
              description: "Beneficiary bank SWIFT BIC."
          steps:
            - name: validate-beneficiary
              type: call
              call: "oracle.get-beneficiary"
              with:
                account_number: "{{beneficiary_account}}"
            - name: send-swift
              type: call
              call: "ibmmq.send-message"
              with:
                queue: "SWIFT.MT103.OUT"
                body: "{\"ref\":\"{{payment_ref}}\",\"beneficiary\":\"{{validate-beneficiary.account_holder}}\",\"bic\":\"{{beneficiary_bic}}\",\"amount\":\"{{amount}}\",\"currency\":\"{{currency}}\"}"
            - name: log-event
              type: call
              call: "splunk.send-event"
              with:
                index: "payments"
                source: "swift-gateway"
                event: "{\"payment_ref\":\"{{payment_ref}}\",\"status\":\"dispatched\",\"amount\":\"{{amount}}\",\"currency\":\"{{currency}}\"}"
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://barclays-ords.db.oracle.com/ords/payments/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_ords_token"
      resources:
        - name: beneficiaries
          path: "/beneficiaries/{{account_number}}"
          inputParameters:
            - name: account_number
              in: path
          operations:
            - name: get-beneficiary
              method: GET
    - type: http
      namespace: ibmmq
      baseUri: "https://barclays-mq.ibm.com/ibmmq/rest/v2"
      authentication:
        type: basic
        username: "$secrets.ibmmq_user"
        password: "$secrets.ibmmq_password"
      resources:
        - name: messages
          path: "/messaging/qmgr/BARCMQ01/queue/{{queue}}/message"
          inputParameters:
            - name: queue
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: splunk
      baseUri: "https://barclays-splunk.splunkcloud.com:8088"
      authentication:
        type: bearer
        token: "$secrets.splunk_hec_token"
      resources:
        - name: events
          path: "/services/collector/event"
          operations:
            - name: send-event
              method: POST

Orchestrates Politically Exposed Persons screening by pulling client data from Salesforce, running PEP screening in Refinitiv, storing the result in Oracle, and creating a compliance review task in Jira if flagged.

naftiko: "0.5"
info:
  label: "PEP Screening Workflow"
  description: "Orchestrates Politically Exposed Persons screening by pulling client data from Salesforce, running PEP screening in Refinitiv, storing the result in Oracle, and creating a compliance review task in Jira if flagged."
  tags:
    - compliance
    - pep-screening
    - salesforce
    - refinitiv
    - oracle-database
    - jira
capability:
  exposes:
    - type: mcp
      namespace: pep-screening
      port: 8080
      tools:
        - name: screen-pep
          description: "Run PEP screening for a client with automated escalation on positive matches."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "Salesforce client account ID."
          steps:
            - name: get-client
              type: call
              call: "salesforce.get-account"
              with:
                account_id: "{{client_id}}"
            - name: run-screening
              type: call
              call: "refinitiv.screen-entity"
              with:
                entity_name: "{{get-client.Name}}"
                entity_type: "individual"
                screening_type: "pep"
            - name: store-result
              type: call
              call: "oracle.insert-screening-result"
              with:
                client_id: "{{client_id}}"
                screening_type: "PEP"
                result: "{{run-screening.overallResult}}"
                match_count: "{{run-screening.matchCount}}"
            - name: create-review
              type: call
              call: "jira.create-issue"
              with:
                project: "COMP"
                issue_type: "Review"
                summary: "PEP Screening Review: {{get-client.Name}} - {{run-screening.overallResult}}"
                description: "Client: {{get-client.Name}}. PEP matches: {{run-screening.matchCount}}. Result: {{run-screening.overallResult}}."
                priority: "High"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://barclays.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: refinitiv
      baseUri: "https://rms-world-check-one-api-pilot.thomsonreuters.com/v2"
      authentication:
        type: bearer
        token: "$secrets.refinitiv_api_key"
      resources:
        - name: screening
          path: "/cases/screeningRequest"
          operations:
            - name: screen-entity
              method: POST
    - type: http
      namespace: oracle
      baseUri: "https://barclays-ords.db.oracle.com/ords/compliance/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_ords_token"
      resources:
        - name: screening-results
          path: "/screening-results"
          operations:
            - name: insert-screening-result
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://barclays.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Initiates review cycles, collects feedback, aggregates scores, and distributes to managers.

naftiko: "0.5"
info:
  label: "Performance Review Cycle Pipeline"
  description: "Initiates review cycles, collects feedback, aggregates scores, and distributes to managers."
  tags:
    - hr
    - workday
    - confluence
    - slack
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: performance_review_cycle_pipeline
          description: "Orchestrate performance review cycle pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-workday
              type: call
              call: "workday.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-confluence
              type: call
              call: "confluence.process-resource"
              with:
                data: "{{get-workday.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Performance Review Cycle Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/barclays"
      authentication:
        type: bearer
        token: "$secrets.workday_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: workday-op
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://barclays.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: confluence-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Triggers a Power BI dataset refresh for a specified workspace and dataset. Used by analysts to ensure dashboards display the latest data.

naftiko: "0.5"
info:
  label: "Power BI Dashboard Refresh"
  description: "Triggers a Power BI dataset refresh for a specified workspace and dataset. Used by analysts to ensure dashboards display the latest data."
  tags:
    - analytics
    - reporting
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: analytics-reporting
      port: 8080
      tools:
        - name: refresh-dashboard
          description: "Trigger a Power BI dataset refresh."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "Power BI workspace (group) ID."
            - name: dataset_id
              in: body
              type: string
              description: "Power BI dataset ID."
          call: "powerbi.refresh-dataset"
          with:
            group_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/{{group_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: group_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST

Orchestrates a real-time payment through the Faster Payments network by validating the payee in Avaloq, debiting the account, dispatching to the payments gateway via Amazon SQS, and logging to Splunk.

naftiko: "0.5"
info:
  label: "Real-Time Payments Processing"
  description: "Orchestrates a real-time payment through the Faster Payments network by validating the payee in Avaloq, debiting the account, dispatching to the payments gateway via Amazon SQS, and logging to Splunk."
  tags:
    - payments
    - real-time-payments
    - avaloq
    - amazon-sqs
    - splunk
capability:
  exposes:
    - type: mcp
      namespace: rtp-processing
      port: 8080
      tools:
        - name: process-faster-payment
          description: "Process a Faster Payment through validation, debit, dispatch, and audit logging."
          inputParameters:
            - name: payer_account
              in: body
              type: string
              description: "Payer account number."
            - name: payee_account
              in: body
              type: string
              description: "Payee account number."
            - name: payee_sort_code
              in: body
              type: string
              description: "Payee sort code."
            - name: amount
              in: body
              type: string
              description: "Payment amount in GBP."
            - name: reference
              in: body
              type: string
              description: "Payment reference."
          steps:
            - name: validate-payee
              type: call
              call: "avaloq.validate-account"
              with:
                account_number: "{{payee_account}}"
                sort_code: "{{payee_sort_code}}"
            - name: debit-account
              type: call
              call: "avaloq.create-debit"
              with:
                account_number: "{{payer_account}}"
                amount: "{{amount}}"
                currency: "GBP"
                reference: "{{reference}}"
            - name: dispatch-payment
              type: call
              call: "sqs.send-message"
              with:
                queue_url: "https://sqs.eu-west-2.amazonaws.com/barclays/faster-payments-outbound"
                message_body: "{\"payerAccount\":\"{{payer_account}}\",\"payeeAccount\":\"{{payee_account}}\",\"sortCode\":\"{{payee_sort_code}}\",\"amount\":\"{{amount}}\",\"reference\":\"{{reference}}\",\"debitRef\":\"{{debit-account.transaction_id}}\"}"
            - name: audit-log
              type: call
              call: "splunk.send-event"
              with:
                index: "payments"
                source: "faster-payments"
                event: "{\"type\":\"FPS\",\"payer\":\"{{payer_account}}\",\"payee\":\"{{payee_account}}\",\"amount\":\"{{amount}}\",\"status\":\"dispatched\"}"
  consumes:
    - type: http
      namespace: avaloq
      baseUri: "https://barclays-avaloq.internal.barclays.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.avaloq_token"
      resources:
        - name: account-validation
          path: "/accounts/{{account_number}}/validate"
          inputParameters:
            - name: account_number
              in: path
          operations:
            - name: validate-account
              method: GET
        - name: debits
          path: "/accounts/{{account_number}}/debits"
          inputParameters:
            - name: account_number
              in: path
          operations:
            - name: create-debit
              method: POST
    - type: http
      namespace: sqs
      baseUri: "https://sqs.eu-west-2.amazonaws.com"
      authentication:
        type: aws-sigv4
        region: "eu-west-2"
        access_key: "$secrets.aws_access_key"
        secret_key: "$secrets.aws_secret_key"
      resources:
        - name: messages
          path: "/barclays/faster-payments-outbound"
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: splunk
      baseUri: "https://barclays-splunk.splunkcloud.com:8088"
      authentication:
        type: bearer
        token: "$secrets.splunk_hec_token"
      resources:
        - name: events
          path: "/services/collector/event"
          operations:
            - name: send-event
              method: POST

Calculates capital ratios, generates regulatory reports, validates against thresholds, and submits.

naftiko: "0.5"
info:
  label: "Regulatory Capital Reporting Pipeline"
  description: "Calculates capital ratios, generates regulatory reports, validates against thresholds, and submits."
  tags:
    - regulatory
    - snowflake
    - powerbi
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: regulatory
      port: 8080
      tools:
        - name: regulatory_capital_reporting_pipeline
          description: "Orchestrate regulatory capital reporting pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-powerbi
              type: call
              call: "powerbi.process-resource"
              with:
                data: "{{get-snowflake.result}}"
            - name: create-confluence
              type: call
              call: "confluence.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Regulatory Capital Reporting Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: powerbi-op
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://barclays.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: confluence-op
              method: POST

Orchestrates quarterly regulatory report generation by extracting data from Snowflake, generating the report in Power BI, uploading to SharePoint, and creating a Jira sign-off task for the compliance officer.

naftiko: "0.5"
info:
  label: "Regulatory Report Generation"
  description: "Orchestrates quarterly regulatory report generation by extracting data from Snowflake, generating the report in Power BI, uploading to SharePoint, and creating a Jira sign-off task for the compliance officer."
  tags:
    - compliance
    - regulatory-reporting
    - snowflake
    - power-bi
    - sharepoint
    - jira
capability:
  exposes:
    - type: mcp
      namespace: regulatory-reporting
      port: 8080
      tools:
        - name: generate-regulatory-report
          description: "Generate and distribute a quarterly regulatory report with sign-off tracking."
          inputParameters:
            - name: report_type
              in: body
              type: string
              description: "Report type (e.g. COREP, FINREP, LCR, NSFR)."
            - name: reporting_period
              in: body
              type: string
              description: "Reporting period in YYYY-QN format."
          steps:
            - name: extract-data
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "CALL regulatory.generate_report_data('{{report_type}}', '{{reporting_period}}')"
                warehouse: "REGULATORY_WH"
                database: "REGULATORY_DB"
            - name: refresh-report
              type: call
              call: "powerbi.refresh-dataset"
              with:
                group_id: "regulatory-reports"
                dataset_id: "{{report_type}}-dataset"
            - name: upload-report
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "regulatory_reporting"
                folder_path: "Reports/{{reporting_period}}/{{report_type}}"
                file_name: "{{report_type}}_{{reporting_period}}.pdf"
            - name: create-signoff
              type: call
              call: "jira.create-issue"
              with:
                project: "REG"
                issue_type: "Task"
                summary: "Sign-off required: {{report_type}} report for {{reporting_period}}"
                description: "Report available at {{upload-report.url}}. Please review and approve."
                priority: "High"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: group_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST
    - 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}}/{{file_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
            - name: file_name
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: jira
      baseUri: "https://barclays.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Retrieves pending access certification items from SailPoint for a given reviewer. Returns identity name, entitlement, and application for each pending review.

naftiko: "0.5"
info:
  label: "SailPoint Access Certification Review"
  description: "Retrieves pending access certification items from SailPoint for a given reviewer. Returns identity name, entitlement, and application for each pending review."
  tags:
    - security
    - identity-governance
    - sailpoint
capability:
  exposes:
    - type: mcp
      namespace: identity-governance
      port: 8080
      tools:
        - name: get-pending-certifications
          description: "Retrieve pending access certification items for a reviewer."
          inputParameters:
            - name: reviewer_id
              in: body
              type: string
              description: "SailPoint reviewer identity ID."
          call: "sailpoint.get-certifications"
          with:
            reviewer_id: "{{reviewer_id}}"
          outputParameters:
            - name: pending_items
              type: array
              mapping: "$.items"
  consumes:
    - type: http
      namespace: sailpoint
      baseUri: "https://barclays.api.identitynow.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sailpoint_token"
      resources:
        - name: certifications
          path: "/certifications?filters=reviewer.id eq \"{{reviewer_id}}\" and phase eq \"ACTIVE\""
          inputParameters:
            - name: reviewer_id
              in: query
          operations:
            - name: get-certifications
              method: GET

Orchestrates sanctions list updates by fetching the latest list from Refinitiv, updating the screening database in Snowflake, triggering a re-screening batch on Azure Databricks, and notifying compliance via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Sanctions List Update Propagation"
  description: "Orchestrates sanctions list updates by fetching the latest list from Refinitiv, updating the screening database in Snowflake, triggering a re-screening batch on Azure Databricks, and notifying compliance via Microsoft Outlook."
  tags:
    - compliance
    - sanctions
    - refinitiv
    - snowflake
    - azure-databricks
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: sanctions-management
      port: 8080
      tools:
        - name: propagate-sanctions-update
          description: "Propagate a sanctions list update across screening infrastructure and notify compliance."
          inputParameters:
            - name: list_type
              in: body
              type: string
              description: "Sanctions list type (OFAC, EU, UN, HMT)."
          steps:
            - name: fetch-list
              type: call
              call: "refinitiv.get-sanctions-list"
              with:
                list_type: "{{list_type}}"
            - name: update-database
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "CALL compliance.update_sanctions_list('{{list_type}}', '{{fetch-list.version}}')"
                warehouse: "COMPLIANCE_WH"
                database: "COMPLIANCE_DB"
            - name: trigger-rescreening
              type: call
              call: "databricks.run-job"
              with:
                job_id: "sanctions-rescreening"
                parameters: "{\"list_type\":\"{{list_type}}\",\"version\":\"{{fetch-list.version}}\"}"
            - name: notify-compliance
              type: call
              call: "outlook.send-mail"
              with:
                to: "sanctions-team@barclays.com"
                subject: "Sanctions List Updated: {{list_type}} v{{fetch-list.version}}"
                body: "{{list_type}} sanctions list updated to version {{fetch-list.version}}. Rescreening batch initiated. {{trigger-rescreening.affected_entities}} entities queued for review."
  consumes:
    - type: http
      namespace: refinitiv
      baseUri: "https://rms-world-check-one-api-pilot.thomsonreuters.com/v2"
      authentication:
        type: bearer
        token: "$secrets.refinitiv_api_key"
      resources:
        - name: sanctions-lists
          path: "/lists/{{list_type}}"
          inputParameters:
            - name: list_type
              in: path
          operations:
            - name: get-sanctions-list
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: databricks
      baseUri: "https://barclays.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/compliance-notices@barclays.com/sendMail"
          operations:
            - name: send-mail
              method: POST

Orchestrates expense report processing by pulling the report from SAP Concur, validating against policy limits in Oracle, logging the approval in ServiceNow, and notifying the submitter via Microsoft Teams.

naftiko: "0.5"
info:
  label: "SAP Concur Expense Report Approval"
  description: "Orchestrates expense report processing by pulling the report from SAP Concur, validating against policy limits in Oracle, logging the approval in ServiceNow, and notifying the submitter via Microsoft Teams."
  tags:
    - finance
    - expense-management
    - sap-concur
    - oracle-database
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: expense-management
      port: 8080
      tools:
        - name: process-expense-report
          description: "Process and approve an expense report with policy validation and audit logging."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "SAP Concur expense report ID."
          steps:
            - name: get-report
              type: call
              call: "concur.get-expense-report"
              with:
                report_id: "{{report_id}}"
            - name: validate-policy
              type: call
              call: "oracle.validate-expense-policy"
              with:
                department: "{{get-report.department}}"
                total_amount: "{{get-report.totalAmount}}"
                expense_type: "{{get-report.expenseType}}"
            - name: log-approval
              type: call
              call: "servicenow.create-record"
              with:
                table: "u_expense_approvals"
                short_description: "Expense approval: {{get-report.employeeName}} - {{get-report.totalAmount}} {{get-report.currency}}"
                description: "Report {{report_id}}. Policy check: {{validate-policy.result}}."
            - name: notify-submitter
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-report.employeeEmail}}"
                text: "Your expense report {{report_id}} ({{get-report.totalAmount}} {{get-report.currency}}) has been {{validate-policy.result}}. Reference: {{log-approval.number}}."
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://us.api.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports/{{report_id}}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-expense-report
              method: GET
    - type: http
      namespace: oracle
      baseUri: "https://barclays-ords.db.oracle.com/ords/finance/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_ords_token"
      resources:
        - name: policy-validation
          path: "/expense-policy/validate"
          operations:
            - name: validate-expense-policy
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: table-records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Detects security incidents, enriches with context, creates response tickets, and notifies the SOC.

naftiko: "0.5"
info:
  label: "Security Incident Response Pipeline"
  description: "Detects security incidents, enriches with context, creates response tickets, and notifies the SOC."
  tags:
    - security
    - splunk
    - servicenow
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: security_incident_response_pipeline
          description: "Orchestrate security incident response pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-splunk
              type: call
              call: "splunk.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                data: "{{get-splunk.result}}"
            - name: create-pagerduty
              type: call
              call: "pagerduty.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Security Incident Response Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://barclays-splunk.com/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: splunk-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: pagerduty-op
              method: POST

Retrieves a ServiceNow incident by number and returns its state, priority, assignment group, and short description. Used by support teams for quick incident lookups.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Status"
  description: "Retrieves a ServiceNow incident by number and returns its state, priority, assignment group, and short description. Used by support teams for quick incident lookups."
  tags:
    - operations
    - itsm
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: itsm-support
      port: 8080
      tools:
        - name: get-incident-status
          description: "Look up a ServiceNow incident by number."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "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://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident?sysparm_query=number={{incident_number}}"
          inputParameters:
            - name: incident_number
              in: query
          operations:
            - name: get-incident
              method: GET

Monitors service levels, detects SLA breaches, creates escalation tickets, and reports to management.

naftiko: "0.5"
info:
  label: "SLA Compliance Monitoring Pipeline"
  description: "Monitors service levels, detects SLA breaches, creates escalation tickets, and reports to management."
  tags:
    - operations
    - datadog
    - servicenow
    - powerbi
capability:
  exposes:
    - type: mcp
      namespace: operations
      port: 8080
      tools:
        - name: sla_compliance_monitoring_pipeline
          description: "Orchestrate sla compliance monitoring pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-datadog
              type: call
              call: "datadog.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                data: "{{get-datadog.result}}"
            - name: create-powerbi
              type: call
              call: "powerbi.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "SLA Compliance Monitoring Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        header: "DD-API-KEY" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: datadog-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: powerbi-op
              method: POST

Executes a parameterized query against the Snowflake risk data warehouse to retrieve portfolio exposure by asset class. Used by risk managers for daily limit checks.

naftiko: "0.5"
info:
  label: "Snowflake Risk Exposure Query"
  description: "Executes a parameterized query against the Snowflake risk data warehouse to retrieve portfolio exposure by asset class. Used by risk managers for daily limit checks."
  tags:
    - risk-management
    - data-warehouse
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: risk-analytics
      port: 8080
      tools:
        - name: query-risk-exposure
          description: "Run a portfolio exposure query on Snowflake by portfolio ID and asset class."
          inputParameters:
            - name: portfolio_id
              in: body
              type: string
              description: "Portfolio identifier."
            - name: asset_class
              in: body
              type: string
              description: "Asset class filter (e.g. equities, fixed_income, fx)."
          call: "snowflake.execute-query"
          with:
            statement: "SELECT asset_class, SUM(notional) as total_exposure, SUM(pnl) as total_pnl FROM risk.positions WHERE portfolio_id = '{{portfolio_id}}' AND asset_class = '{{asset_class}}' GROUP BY asset_class"
            warehouse: "RISK_WH"
            database: "RISK_DB"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Audits license usage, identifies underutilized licenses, recommends optimization, and notifies IT.

naftiko: "0.5"
info:
  label: "Software License Optimization Pipeline"
  description: "Audits license usage, identifies underutilized licenses, recommends optimization, and notifies IT."
  tags:
    - operations
    - servicenow
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: operations
      port: 8080
      tools:
        - name: software_license_optimization
          description: "Orchestrate software license optimization pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-servicenow
              type: call
              call: "servicenow.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                data: "{{get-servicenow.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Software License Optimization Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Searches Splunk for security events matching a given query string and time range. Used by the SOC team for rapid threat investigation.

naftiko: "0.5"
info:
  label: "Splunk Security Event Search"
  description: "Searches Splunk for security events matching a given query string and time range. Used by the SOC team for rapid threat investigation."
  tags:
    - security
    - siem
    - splunk
capability:
  exposes:
    - type: mcp
      namespace: security-monitoring
      port: 8080
      tools:
        - name: search-security-events
          description: "Search Splunk for security events by query and time range."
          inputParameters:
            - name: search_query
              in: body
              type: string
              description: "Splunk search query (SPL)."
            - name: earliest_time
              in: body
              type: string
              description: "Earliest time for search (e.g. -24h, -7d)."
          call: "splunk.create-search"
          with:
            search: "{{search_query}}"
            earliest_time: "{{earliest_time}}"
            latest_time: "now"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://barclays-splunk.splunkcloud.com:8089"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search-jobs
          path: "/services/search/jobs"
          operations:
            - name: create-search
              method: POST

Orchestrates a regulatory stress test by pulling portfolio positions from Bloomberg AIM, applying scenario shocks via Azure Databricks, storing results in Snowflake, generating the report in Power BI, and emailing the risk committee.

naftiko: "0.5"
info:
  label: "Stress Testing Orchestrator"
  description: "Orchestrates a regulatory stress test by pulling portfolio positions from Bloomberg AIM, applying scenario shocks via Azure Databricks, storing results in Snowflake, generating the report in Power BI, and emailing the risk committee."
  tags:
    - risk-management
    - stress-testing
    - bloomberg-aim
    - azure-databricks
    - snowflake
    - power-bi
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: stress-testing
      port: 8080
      tools:
        - name: run-stress-test
          description: "Execute a full stress testing scenario across the portfolio with reporting and notification."
          inputParameters:
            - name: scenario_name
              in: body
              type: string
              description: "Stress scenario name (e.g. severe_recession, rate_shock_200bps)."
            - name: portfolio_id
              in: body
              type: string
              description: "Portfolio to stress test."
          steps:
            - name: get-positions
              type: call
              call: "bloomberg-aim.get-positions"
              with:
                portfolio_id: "{{portfolio_id}}"
            - name: apply-scenario
              type: call
              call: "databricks.run-job"
              with:
                job_id: "stress-test-engine"
                parameters: "{\"scenario\":\"{{scenario_name}}\",\"positions\":{{get-positions.holdings}}}"
            - name: store-results
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "INSERT INTO risk.stress_test_results (portfolio_id, scenario, pnl_impact, capital_impact, run_date) VALUES ('{{portfolio_id}}', '{{scenario_name}}', '{{apply-scenario.pnl_impact}}', '{{apply-scenario.capital_impact}}', CURRENT_DATE())"
                warehouse: "RISK_WH"
                database: "RISK_DB"
            - name: refresh-report
              type: call
              call: "powerbi.refresh-dataset"
              with:
                group_id: "risk-reporting"
                dataset_id: "stress-test-results"
            - name: notify-committee
              type: call
              call: "outlook.send-mail"
              with:
                to: "risk-committee@barclays.com"
                subject: "Stress Test Complete: {{scenario_name}} - Portfolio {{portfolio_id}}"
                body: "Scenario: {{scenario_name}}. PnL Impact: {{apply-scenario.pnl_impact}}. Capital Impact: {{apply-scenario.capital_impact}}. Dashboard refreshed."
  consumes:
    - type: http
      namespace: bloomberg-aim
      baseUri: "https://aim.bloomberg.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_aim_token"
      resources:
        - name: positions
          path: "/portfolios/{{portfolio_id}}/positions"
          inputParameters:
            - name: portfolio_id
              in: path
          operations:
            - name: get-positions
              method: GET
    - type: http
      namespace: databricks
      baseUri: "https://barclays.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: group_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              method: POST
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/users/risk-reporting@barclays.com/sendMail"
          operations:
            - name: send-mail
              method: POST

Monitors integration endpoints, detects failures, creates support tickets, and notifies integration team.

naftiko: "0.5"
info:
  label: "Third-Party Integration Health Pipeline"
  description: "Monitors integration endpoints, detects failures, creates support tickets, and notifies integration team."
  tags:
    - integrations
    - datadog
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: integrations
      port: 8080
      tools:
        - name: third_party_integration_health_pipeline
          description: "Orchestrate third-party integration health pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-datadog
              type: call
              call: "datadog.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                data: "{{get-datadog.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Third-Party Integration Health Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        header: "DD-API-KEY" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: datadog-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

After a trade is executed on Tradeweb, fetches the trade details, retrieves counterparty data from Salesforce, publishes a settlement instruction to IBM MQ, and updates the position in Bloomberg AIM.

naftiko: "0.5"
info:
  label: "Trade Execution Post-Trade Enrichment"
  description: "After a trade is executed on Tradeweb, fetches the trade details, retrieves counterparty data from Salesforce, publishes a settlement instruction to IBM MQ, and updates the position in Bloomberg AIM."
  tags:
    - trading
    - post-trade
    - tradeweb
    - salesforce
    - ibm-mq
    - bloomberg-aim
capability:
  exposes:
    - type: mcp
      namespace: trade-enrichment
      port: 8080
      tools:
        - name: enrich-trade
          description: "Enrich a completed trade with counterparty data, publish settlement instruction, and update portfolio position."
          inputParameters:
            - name: trade_id
              in: body
              type: string
              description: "The Tradeweb trade identifier."
          steps:
            - name: get-trade
              type: call
              call: "tradeweb.get-trade"
              with:
                trade_id: "{{trade_id}}"
            - name: get-counterparty
              type: call
              call: "salesforce.get-account"
              with:
                account_id: "{{get-trade.counterparty_id}}"
            - name: publish-settlement
              type: call
              call: "ibmmq.send-message"
              with:
                queue: "SETTLEMENT.INSTRUCTIONS"
                body: "{\"tradeId\":\"{{trade_id}}\",\"counterparty\":\"{{get-counterparty.Name}}\",\"amount\":\"{{get-trade.notional}}\",\"currency\":\"{{get-trade.currency}}\",\"settleDate\":\"{{get-trade.settlement_date}}\"}"
            - name: update-aim
              type: call
              call: "bloomberg-aim.update-position"
              with:
                portfolio_id: "{{get-trade.portfolio_id}}"
                security: "{{get-trade.security}}"
                quantity: "{{get-trade.quantity}}"
  consumes:
    - type: http
      namespace: tradeweb
      baseUri: "https://api.tradeweb.com/v1"
      authentication:
        type: bearer
        token: "$secrets.tradeweb_api_key"
      resources:
        - name: trades
          path: "/trades/{{trade_id}}"
          inputParameters:
            - name: trade_id
              in: path
          operations:
            - name: get-trade
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://barclays.my.salesforce.com/services/data/v59.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: ibmmq
      baseUri: "https://barclays-mq.ibm.com/ibmmq/rest/v2"
      authentication:
        type: basic
        username: "$secrets.ibmmq_user"
        password: "$secrets.ibmmq_password"
      resources:
        - name: messages
          path: "/messaging/qmgr/BARCMQ01/queue/{{queue}}/message"
          inputParameters:
            - name: queue
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: bloomberg-aim
      baseUri: "https://aim.bloomberg.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_aim_token"
      resources:
        - name: positions
          path: "/portfolios/{{portfolio_id}}/positions"
          inputParameters:
            - name: portfolio_id
              in: path
          operations:
            - name: update-position
              method: PUT

Orchestrates trade surveillance by pulling suspicious trade patterns from Snowflake, enriching with trader details from Workday, screening the counterparty in Refinitiv, and filing a compliance report in ServiceNow.

naftiko: "0.5"
info:
  label: "Trade Surveillance Alert Processing"
  description: "Orchestrates trade surveillance by pulling suspicious trade patterns from Snowflake, enriching with trader details from Workday, screening the counterparty in Refinitiv, and filing a compliance report in ServiceNow."
  tags:
    - compliance
    - trade-surveillance
    - snowflake
    - workday
    - refinitiv
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: trade-surveillance
      port: 8080
      tools:
        - name: process-surveillance-alert
          description: "Process a trade surveillance alert with enrichment and compliance filing."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "Surveillance alert identifier."
            - name: trader_id
              in: body
              type: string
              description: "Workday worker ID of the trader."
          steps:
            - name: get-alert-details
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "SELECT * FROM compliance.surveillance_alerts WHERE alert_id = '{{alert_id}}'"
                warehouse: "COMPLIANCE_WH"
                database: "COMPLIANCE_DB"
            - name: get-trader
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{trader_id}}"
            - name: screen-counterparty
              type: call
              call: "refinitiv.screen-entity"
              with:
                entity_name: "{{get-alert-details.counterparty_name}}"
                entity_type: "organisation"
            - name: file-report
              type: call
              call: "servicenow.create-record"
              with:
                table: "u_surveillance_reports"
                short_description: "Surveillance Alert {{alert_id}} - Trader: {{get-trader.full_name}}"
                description: "Pattern: {{get-alert-details.pattern_type}}. Counterparty screening: {{screen-counterparty.overallResult}}. Trade volume: {{get-alert-details.trade_volume}}."
                priority: "2"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/barclays"
      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: refinitiv
      baseUri: "https://rms-world-check-one-api-pilot.thomsonreuters.com/v2"
      authentication:
        type: bearer
        token: "$secrets.refinitiv_api_key"
      resources:
        - name: screening
          path: "/cases/screeningRequest"
          operations:
            - name: screen-entity
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: table-records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST

Tracks mandatory training completion, sends reminders, escalates non-compliance, and reports status.

naftiko: "0.5"
info:
  label: "Training Compliance Tracker Pipeline"
  description: "Tracks mandatory training completion, sends reminders, escalates non-compliance, and reports status."
  tags:
    - compliance
    - workday
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: training_compliance_tracker_pipeline
          description: "Orchestrate training compliance tracker pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-workday
              type: call
              call: "workday.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                data: "{{get-workday.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Training Compliance Tracker Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/barclays"
      authentication:
        type: bearer
        token: "$secrets.workday_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: workday-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Monitors transactions for suspicious patterns, scores risk, creates alerts, and notifies compliance.

naftiko: "0.5"
info:
  label: "Transaction Monitoring Pipeline"
  description: "Monitors transactions for suspicious patterns, scores risk, creates alerts, and notifies compliance."
  tags:
    - compliance
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: transaction_monitoring_pipeline
          description: "Orchestrate transaction monitoring pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                data: "{{get-snowflake.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Transaction Monitoring Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Orchestrates a portfolio reconciliation by extracting positions from Bloomberg AIM, running the reconciliation on Trioptima, logging discrepancies in Snowflake, and creating a Jira task for the operations team.

naftiko: "0.5"
info:
  label: "Trioptima Portfolio Reconciliation"
  description: "Orchestrates a portfolio reconciliation by extracting positions from Bloomberg AIM, running the reconciliation on Trioptima, logging discrepancies in Snowflake, and creating a Jira task for the operations team."
  tags:
    - operations
    - reconciliation
    - bloomberg-aim
    - trioptima
    - snowflake
    - jira
capability:
  exposes:
    - type: mcp
      namespace: portfolio-recon
      port: 8080
      tools:
        - name: reconcile-portfolio
          description: "Run portfolio reconciliation between internal positions and Trioptima, logging breaks."
          inputParameters:
            - name: portfolio_id
              in: body
              type: string
              description: "Bloomberg AIM portfolio identifier."
            - name: recon_date
              in: body
              type: string
              description: "Reconciliation date (YYYY-MM-DD)."
          steps:
            - name: get-positions
              type: call
              call: "bloomberg-aim.get-positions"
              with:
                portfolio_id: "{{portfolio_id}}"
            - name: run-recon
              type: call
              call: "trioptima.submit-reconciliation"
              with:
                portfolio_id: "{{portfolio_id}}"
                as_of_date: "{{recon_date}}"
                positions: "{{get-positions.holdings}}"
            - name: log-breaks
              type: call
              call: "snowflake.execute-query"
              with:
                statement: "INSERT INTO ops.recon_breaks SELECT * FROM TABLE(RESULT_SCAN('{{run-recon.query_id}}')) WHERE status = 'BREAK'"
                warehouse: "OPS_WH"
                database: "OPS_DB"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "OPS"
                issue_type: "Task"
                summary: "Recon breaks: Portfolio {{portfolio_id}} as of {{recon_date}}"
                description: "{{run-recon.break_count}} breaks found. Review in Snowflake OPS_DB.ops.recon_breaks."
  consumes:
    - type: http
      namespace: bloomberg-aim
      baseUri: "https://aim.bloomberg.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_aim_token"
      resources:
        - name: positions
          path: "/portfolios/{{portfolio_id}}/positions"
          inputParameters:
            - name: portfolio_id
              in: path
          operations:
            - name: get-positions
              method: GET
    - type: http
      namespace: trioptima
      baseUri: "https://api.trioptima.com/v1"
      authentication:
        type: bearer
        token: "$secrets.trioptima_token"
      resources:
        - name: reconciliations
          path: "/reconciliations"
          operations:
            - name: submit-reconciliation
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://barclays.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://barclays.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Evaluates vendor security posture, scores risk, creates assessment records, and notifies procurement.

naftiko: "0.5"
info:
  label: "Vendor Risk Assessment Pipeline"
  description: "Evaluates vendor security posture, scores risk, creates assessment records, and notifies procurement."
  tags:
    - procurement
    - servicenow
    - confluence
    - slack
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: vendor_risk_assessment_pipeline
          description: "Orchestrate vendor risk assessment pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-servicenow
              type: call
              call: "servicenow.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-confluence
              type: call
              call: "confluence.process-resource"
              with:
                data: "{{get-servicenow.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Vendor Risk Assessment Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://barclays.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://barclays.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: confluence-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Orchestrates portfolio rebalancing by pulling current positions from Bloomberg AIM, computing target allocations via Azure Machine Learning, generating trade orders, and notifying the advisor in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Wealth Management Portfolio Rebalancing"
  description: "Orchestrates portfolio rebalancing by pulling current positions from Bloomberg AIM, computing target allocations via Azure Machine Learning, generating trade orders, and notifying the advisor in Microsoft Teams."
  tags:
    - wealth-management
    - portfolio
    - bloomberg-aim
    - azure-machine-learning
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: wealth-rebalance
      port: 8080
      tools:
        - name: rebalance-portfolio
          description: "Trigger a portfolio rebalancing workflow for a wealth management client."
          inputParameters:
            - name: portfolio_id
              in: body
              type: string
              description: "Bloomberg AIM portfolio identifier."
            - name: risk_profile
              in: body
              type: string
              description: "Client risk profile (conservative, moderate, aggressive)."
          steps:
            - name: get-positions
              type: call
              call: "bloomberg-aim.get-positions"
              with:
                portfolio_id: "{{portfolio_id}}"
            - name: compute-targets
              type: call
              call: "azure-ml.score-model"
              with:
                model_name: "portfolio-optimizer"
                input_data: "{\"positions\":{{get-positions.holdings}},\"risk_profile\":\"{{risk_profile}}\"}"
            - name: notify-advisor
              type: call
              call: "msteams.send-channel-message"
              with:
                team_id: "wealth-advisory"
                channel_id: "rebalancing"
                text: "Portfolio {{portfolio_id}} rebalancing complete. Target allocation: {{compute-targets.targetAllocation}}. Trades required: {{compute-targets.tradeCount}}."
  consumes:
    - type: http
      namespace: bloomberg-aim
      baseUri: "https://aim.bloomberg.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_aim_token"
      resources:
        - name: positions
          path: "/portfolios/{{portfolio_id}}/positions"
          inputParameters:
            - name: portfolio_id
              in: path
          operations:
            - name: get-positions
              method: GET
    - type: http
      namespace: azure-ml
      baseUri: "https://barclays-ml.westeurope.inference.ml.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_ml_token"
      resources:
        - name: scoring
          path: "/score"
          operations:
            - name: score-model
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Retrieves employee details from Workday by worker ID, returning name, department, manager, and hire date.

naftiko: "0.5"
info:
  label: "Workday Employee Lookup"
  description: "Retrieves employee details from Workday by worker ID, returning name, department, manager, and hire date."
  tags:
    - hr
    - employee-data
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr-data
      port: 8080
      tools:
        - name: get-employee
          description: "Look up a Workday employee by worker ID."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "Workday worker ID."
          call: "workday.get-worker"
          with:
            worker_id: "{{worker_id}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.worker.fullName"
            - name: department
              type: string
              mapping: "$.worker.department"
            - name: manager
              type: string
              mapping: "$.worker.manager.fullName"
            - name: hire_date
              type: string
              mapping: "$.worker.hireDate"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/barclays"
      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