ING Capabilities

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

Sort
Expand

Retrieves usage analytics from Adobe Analytics for ING's digital banking platform.

naftiko: "0.5"
info:
  label: "Adobe Analytics Digital Banking Reporter"
  description: "Retrieves usage analytics from Adobe Analytics for ING's digital banking platform."
  tags:
    - analytics
    - digital-banking
    - adobe-analytics
capability:
  exposes:
    - type: mcp
      namespace: digital-analytics
      port: 8080
      tools:
        - name: get-banking-analytics
          description: "Retrieve digital banking analytics from Adobe Analytics."
          inputParameters:
            - name: report_suite_id
              in: body
              type: string
              description: "Adobe Analytics report suite ID."
            - name: date_range
              in: body
              type: string
              description: "Date range."
          call: "adobe-analytics.get-report"
          with:
            rsid: "{{report_suite_id}}"
            date_range: "{{date_range}}"
          outputParameters:
            - name: active_users
              type: string
              mapping: "$.report.data.rows[0].value"
            - name: login_count
              type: string
              mapping: "$.report.data.rows[1].value"
  consumes:
    - type: http
      namespace: adobe-analytics
      baseUri: "https://analytics.adobe.io/api"
      authentication:
        type: bearer
        token: "$secrets.adobe_analytics_token"
      resources:
        - name: reports
          path: "/{{rsid}}/reports"
          inputParameters:
            - name: rsid
              in: path
          operations:
            - name: get-report
              method: POST

Syncs Workday time entries to ADP for payroll processing and confirms via Teams.

naftiko: "0.5"
info:
  label: "ADP Payroll Sync"
  description: "Syncs Workday time entries to ADP for payroll processing and confirms via Teams."
  tags:
    - hr
    - payroll
    - workday
    - adp
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: payroll-sync
      port: 8080
      tools:
        - name: sync-payroll
          description: "Sync time entries to ADP payroll."
          inputParameters:
            - name: pay_period
              in: body
              type: string
              description: "Pay period."
          steps:
            - name: get-entries
              type: call
              call: "workday.get-time-entries"
              with:
                pay_period: "{{pay_period}}"
            - name: submit
              type: call
              call: "adp.submit-payroll"
              with:
                entries: "{{get-entries.entries}}"
            - name: confirm
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "hr_payroll"
                text: "Payroll sync for {{pay_period}}: {{submit.employee_count}} processed."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: time-entries
          path: "/time/entries"
          operations:
            - name: get-time-entries
              method: GET
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token"
      resources:
        - name: payroll
          path: "/payroll/payroll-processing"
          operations:
            - name: submit-payroll
              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-message
              method: POST

Investigates a suspicious activity alert by retrieving transaction history from Temenos, running enhanced due diligence via the compliance platform, creating a case in Salesforce, and notifying the compliance team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "AML Suspicious Activity Investigation Pipeline"
  description: "Investigates a suspicious activity alert by retrieving transaction history from Temenos, running enhanced due diligence via the compliance platform, creating a case in Salesforce, and notifying the compliance team via Microsoft Teams."
  tags:
    - compliance
    - aml
    - temenos-transact
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: aml-investigation
      port: 8080
      tools:
        - name: investigate-alert
          description: "Investigate an AML suspicious activity alert."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "The AML alert ID."
            - name: customer_id
              in: body
              type: string
              description: "The customer ID."
          steps:
            - name: get-transactions
              type: call
              call: "temenos.get-transaction-history"
              with:
                customer_id: "{{customer_id}}"
                days: "90"
            - name: run-edd
              type: call
              call: "compliance.enhanced-due-diligence"
              with:
                customer_id: "{{customer_id}}"
                alert_id: "{{alert_id}}"
            - name: create-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "AML Investigation: Alert {{alert_id}} - Customer {{customer_id}}"
                description: "Transaction count (90d): {{get-transactions.count}}. EDD risk score: {{run-edd.risk_score}}. EDD findings: {{run-edd.findings}}."
                type: "AML_Investigation"
                priority: "High"
            - name: notify-compliance
              type: call
              call: "teams.send-message"
              with:
                channel: "AML_Investigations"
                message: "New AML case created: {{create-case.case_number}}. Alert: {{alert_id}}. Customer: {{customer_id}}. EDD Risk: {{run-edd.risk_score}}."
  consumes:
    - type: http
      namespace: temenos
      baseUri: "https://core-banking.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.temenos_token"
      resources:
        - name: transactions
          path: "/customers/{{customer_id}}/transactions"
          inputParameters:
            - name: customer_id
              in: path
          operations:
            - name: get-transaction-history
              method: GET
    - type: http
      namespace: compliance
      baseUri: "https://compliance-screening.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.compliance_token"
      resources:
        - name: edd
          path: "/edd/assess"
          operations:
            - name: enhanced-due-diligence
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://ing.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Checks the provisioning status of an ING card on Apple Pay.

naftiko: "0.5"
info:
  label: "Apple Pay Provisioning Status"
  description: "Checks the provisioning status of an ING card on Apple Pay."
  tags:
    - payments
    - mobile-banking
    - apple-pay
capability:
  exposes:
    - type: mcp
      namespace: mobile-payments
      port: 8080
      tools:
        - name: get-apple-pay-status
          description: "Check Apple Pay provisioning status for a card."
          inputParameters:
            - name: card_id
              in: body
              type: string
              description: "Card identifier."
          call: "apple-pay.get-provisioning"
          with:
            card_id: "{{card_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.provisioningStatus"
            - name: device_count
              type: string
              mapping: "$.activeDevices"
  consumes:
    - type: http
      namespace: apple-pay
      baseUri: "https://mobile-payments.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.apple_pay_token"
      resources:
        - name: provisioning
          path: "/cards/{{card_id}}/apple-pay"
          inputParameters:
            - name: card_id
              in: path
          operations:
            - name: get-provisioning
              method: GET

Retrieves an ING employee's Azure AD profile.

naftiko: "0.5"
info:
  label: "Azure Active Directory User Lookup"
  description: "Retrieves an ING employee's Azure AD profile."
  tags:
    - it-operations
    - identity
    - azure-active-directory
capability:
  exposes:
    - type: mcp
      namespace: identity
      port: 8080
      tools:
        - name: get-ad-user
          description: "Look up an employee in Azure AD by UPN."
          inputParameters:
            - name: user_upn
              in: body
              type: string
              description: "User principal name."
          call: "azuread.get-user"
          with:
            user_upn: "{{user_upn}}"
          outputParameters:
            - name: display_name
              type: string
              mapping: "$.displayName"
            - name: job_title
              type: string
              mapping: "$.jobTitle"
            - name: department
              type: string
              mapping: "$.department"
  consumes:
    - type: http
      namespace: azuread
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users/{{user_upn}}"
          inputParameters:
            - name: user_upn
              in: path
          operations:
            - name: get-user
              method: GET

Triggers a credit risk model run in Azure Databricks for ING lending, returning model output, probability of default, and risk category.

naftiko: "0.5"
info:
  label: "Azure Databricks Credit Model Runner"
  description: "Triggers a credit risk model run in Azure Databricks for ING lending, returning model output, probability of default, and risk category."
  tags:
    - machine-learning
    - azure-databricks
    - risk
capability:
  exposes:
    - type: mcp
      namespace: credit-models
      port: 8080
      tools:
        - name: run-credit-model
          description: "Trigger a credit risk model run in Azure Databricks."
          inputParameters:
            - name: model_name
              in: body
              type: string
              description: "The ML model name."
            - name: customer_segment
              in: body
              type: string
              description: "The customer segment."
          call: "databricks.run-job"
          with:
            model_name: "{{model_name}}"
            customer_segment: "{{customer_segment}}"
          outputParameters:
            - name: run_id
              type: string
              mapping: "$.run_id"
            - name: pd_output
              type: string
              mapping: "$.output.pd"
            - name: risk_category
              type: string
              mapping: "$.output.risk_category"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://adb-ing.azuredatabricks.net/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST

Retrieves latest build status from Azure DevOps for ING applications.

naftiko: "0.5"
info:
  label: "Azure DevOps Build Status Checker"
  description: "Retrieves latest build status from Azure DevOps for ING applications."
  tags:
    - it-operations
    - cicd
    - azure-devops
capability:
  exposes:
    - type: mcp
      namespace: build-status
      port: 8080
      tools:
        - name: get-build-status
          description: "Check latest Azure DevOps build status."
          inputParameters:
            - name: project
              in: body
              type: string
              description: "Azure DevOps project."
            - name: pipeline_id
              in: body
              type: string
              description: "Pipeline ID."
          call: "azdevops.get-build"
          with:
            project: "{{project}}"
            pipeline_id: "{{pipeline_id}}"
          outputParameters:
            - name: result
              type: string
              mapping: "$.value[0].result"
  consumes:
    - type: http
      namespace: azdevops
      baseUri: "https://dev.azure.com/ing"
      authentication:
        type: basic
        username: ""
        password: "$secrets.azdevops_pat"
      resources:
        - name: builds
          path: "/{{project}}/_apis/build/builds"
          inputParameters:
            - name: project
              in: path
            - name: definitions
              in: query
              value: "{{pipeline_id}}"
            - name: $top
              in: query
              value: "1"
            - name: api-version
              in: query
              value: "7.0"
          operations:
            - name: get-build
              method: GET

Retrieves a secret value from Azure Key Vault for secure configuration management.

naftiko: "0.5"
info:
  label: "Azure Key Vault Secret Retriever"
  description: "Retrieves a secret value from Azure Key Vault for secure configuration management."
  tags:
    - security
    - it-operations
    - azure-key-vault
capability:
  exposes:
    - type: mcp
      namespace: secret-management
      port: 8080
      tools:
        - name: get-secret
          description: "Retrieve a secret from Azure Key Vault."
          inputParameters:
            - name: vault_name
              in: body
              type: string
              description: "Key Vault name."
            - name: secret_name
              in: body
              type: string
              description: "Secret name."
          call: "keyvault.get-secret"
          with:
            vault_name: "{{vault_name}}"
            secret_name: "{{secret_name}}"
          outputParameters:
            - name: value
              type: string
              mapping: "$.value"
            - name: created
              type: string
              mapping: "$.attributes.created"
  consumes:
    - type: http
      namespace: keyvault
      baseUri: "https://{{vault_name}}.vault.azure.net"
      authentication:
        type: bearer
        token: "$secrets.azure_keyvault_token"
      resources:
        - name: secrets
          path: "/secrets/{{secret_name}}"
          inputParameters:
            - name: secret_name
              in: path
            - name: api-version
              in: query
              value: "7.4"
          operations:
            - name: get-secret
              method: GET

Retrieves bond pricing data from Bloomberg Enterprise Data for ING fixed income trading, returning clean price, dirty price, yield to maturity, and spread.

naftiko: "0.5"
info:
  label: "Bloomberg Terminal Bond Pricing"
  description: "Retrieves bond pricing data from Bloomberg Enterprise Data for ING fixed income trading, returning clean price, dirty price, yield to maturity, and spread."
  tags:
    - trading
    - fixed-income
    - bloomberg-enterprise-data
capability:
  exposes:
    - type: mcp
      namespace: bond-pricing
      port: 8080
      tools:
        - name: get-bond-price
          description: "Retrieve bond pricing from Bloomberg."
          inputParameters:
            - name: isin
              in: body
              type: string
              description: "The bond ISIN."
          call: "bloomberg.get-pricing"
          with:
            isin: "{{isin}}"
          outputParameters:
            - name: clean_price
              type: string
              mapping: "$.data[0].cleanPrice"
            - name: dirty_price
              type: string
              mapping: "$.data[0].dirtyPrice"
            - name: ytm
              type: string
              mapping: "$.data[0].yieldToMaturity"
            - name: spread
              type: string
              mapping: "$.data[0].zSpread"
  consumes:
    - type: http
      namespace: bloomberg
      baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_token"
      resources:
        - name: pricing
          path: "/securities/{{isin}}/pricing"
          inputParameters:
            - name: isin
              in: path
          operations:
            - name: get-pricing
              method: GET

Uploads an audit or compliance document to Box and returns a shared link.

naftiko: "0.5"
info:
  label: "Box Audit Document Uploader"
  description: "Uploads an audit or compliance document to Box and returns a shared link."
  tags:
    - compliance
    - documents
    - box
capability:
  exposes:
    - type: mcp
      namespace: audit-docs
      port: 8080
      tools:
        - name: upload-audit-doc
          description: "Upload an audit document to Box."
          inputParameters:
            - name: folder_id
              in: body
              type: string
              description: "Box folder ID."
            - name: file_name
              in: body
              type: string
              description: "File name."
            - name: file_content
              in: body
              type: string
              description: "Base64-encoded content."
          call: "box.upload-file"
          with:
            folder_id: "{{folder_id}}"
            file_name: "{{file_name}}"
            content: "{{file_content}}"
          outputParameters:
            - name: shared_link
              type: string
              mapping: "$.entries[0].shared_link.url"
  consumes:
    - type: http
      namespace: box
      baseUri: "https://upload.box.com/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files/content"
          operations:
            - name: upload-file
              method: POST

Retrieves network device status from Cisco Control Hub for ING branch and data center infrastructure, returning device state, uptime, firmware version, and interface count.

naftiko: "0.5"
info:
  label: "Cisco Network Device Status"
  description: "Retrieves network device status from Cisco Control Hub for ING branch and data center infrastructure, returning device state, uptime, firmware version, and interface count."
  tags:
    - infrastructure
    - cisco
    - networking
capability:
  exposes:
    - type: mcp
      namespace: network-devices
      port: 8080
      tools:
        - name: get-device-status
          description: "Retrieve Cisco network device status."
          inputParameters:
            - name: device_id
              in: body
              type: string
              description: "The Cisco device serial number."
          call: "cisco.get-device"
          with:
            device_id: "{{device_id}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.response.managementState"
            - name: uptime
              type: string
              mapping: "$.response.upTime"
            - name: firmware
              type: string
              mapping: "$.response.softwareVersion"
  consumes:
    - type: http
      namespace: cisco
      baseUri: "https://webexapis.com/v1"
      authentication:
        type: bearer
        token: "$secrets.cisco_token"
      resources:
        - name: devices
          path: "/devices/{{device_id}}"
          inputParameters:
            - name: device_id
              in: path
          operations:
            - name: get-device
              method: GET

Queries Cloudflare for WAF events targeting ING web properties.

naftiko: "0.5"
info:
  label: "Cloudflare WAF Event Monitor"
  description: "Queries Cloudflare for WAF events targeting ING web properties."
  tags:
    - security
    - it-operations
    - cloudflare
capability:
  exposes:
    - type: mcp
      namespace: waf-monitoring
      port: 8080
      tools:
        - name: get-waf-events
          description: "Retrieve Cloudflare WAF events."
          inputParameters:
            - name: zone_id
              in: body
              type: string
              description: "Cloudflare zone ID."
          call: "cloudflare.get-events"
          with:
            zone_id: "{{zone_id}}"
          outputParameters:
            - name: events
              type: string
              mapping: "$.result"
            - name: total_blocked
              type: string
              mapping: "$.result_info.total_count"
  consumes:
    - type: http
      namespace: cloudflare
      baseUri: "https://api.cloudflare.com/client/v4"
      authentication:
        type: bearer
        token: "$secrets.cloudflare_token"
      resources:
        - name: events
          path: "/zones/{{zone_id}}/security/events"
          inputParameters:
            - name: zone_id
              in: path
          operations:
            - name: get-events
              method: GET

When a Concur expense is submitted, retrieves details and notifies approver via Teams.

naftiko: "0.5"
info:
  label: "Concur Expense Report Notifier"
  description: "When a Concur expense is submitted, retrieves details and notifies approver via Teams."
  tags:
    - finance
    - expenses
    - sap-concur
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: expense-approval
      port: 8080
      tools:
        - name: notify-expense
          description: "Fetch Concur expense and notify approver."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "Concur report ID."
          steps:
            - name: get-report
              type: call
              call: "concur.get-expense-report"
              with:
                report_id: "{{report_id}}"
            - name: notify
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-report.approver_email}}"
                text: "Expense pending: {{get-report.employee_name}} - EUR {{get-report.total_amount}}. Review: {{get-report.approval_url}}"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://eu.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: 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

Creates a knowledge base article in Confluence for ING procedures.

naftiko: "0.5"
info:
  label: "Confluence Knowledge Base Article Creator"
  description: "Creates a knowledge base article in Confluence for ING procedures."
  tags:
    - knowledge-management
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: knowledge-base
      port: 8080
      tools:
        - name: create-article
          description: "Create a Confluence knowledge base article."
          inputParameters:
            - name: space_key
              in: body
              type: string
              description: "Confluence space key."
            - name: title
              in: body
              type: string
              description: "Title."
            - name: body
              in: body
              type: string
              description: "Body in HTML."
          call: "confluence.create-page"
          with:
            space_key: "{{space_key}}"
            title: "{{title}}"
            body: "{{body}}"
          outputParameters:
            - name: page_url
              type: string
              mapping: "$._links.webui"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://ing.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Processes corporate loan renewal by pulling current facility data from Temenos, running updated credit analysis, generating renewal terms, and creating the approval workflow in ServiceNow.

naftiko: "0.5"
info:
  label: "Corporate Lending Renewal Pipeline"
  description: "Processes corporate loan renewal by pulling current facility data from Temenos, running updated credit analysis, generating renewal terms, and creating the approval workflow in ServiceNow."
  tags:
    - lending
    - corporate-banking
    - temenos-transact
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: corporate-lending
      port: 8080
      tools:
        - name: process-renewal
          description: "Process a corporate lending facility renewal."
          inputParameters:
            - name: facility_id
              in: body
              type: string
              description: "The lending facility ID."
            - name: corporate_id
              in: body
              type: string
              description: "The corporate client ID."
          steps:
            - name: get-facility
              type: call
              call: "temenos.get-facility"
              with:
                facility_id: "{{facility_id}}"
            - name: run-credit-analysis
              type: call
              call: "credit-engine.analyze-corporate"
              with:
                corporate_id: "{{corporate_id}}"
                current_exposure: "{{get-facility.outstanding_amount}}"
            - name: generate-terms
              type: call
              call: "pricing-engine.calculate-corporate-rate"
              with:
                facility_id: "{{facility_id}}"
                credit_grade: "{{run-credit-analysis.credit_grade}}"
            - name: create-approval
              type: call
              call: "servicenow.create-request"
              with:
                short_description: "Lending renewal: Facility {{facility_id}} - {{get-facility.client_name}}"
                description: "Current amount: {{get-facility.outstanding_amount}}. Credit grade: {{run-credit-analysis.credit_grade}}. Proposed rate: {{generate-terms.offered_rate}}."
                assignment_group: "Credit_Committee"
                priority: "2"
  consumes:
    - type: http
      namespace: temenos
      baseUri: "https://core-banking.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.temenos_token"
      resources:
        - name: facilities
          path: "/facilities/{{facility_id}}"
          inputParameters:
            - name: facility_id
              in: path
          operations:
            - name: get-facility
              method: GET
    - type: http
      namespace: credit-engine
      baseUri: "https://credit-scoring.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.credit_engine_token"
      resources:
        - name: corporate-analysis
          path: "/analyze/corporate"
          operations:
            - name: analyze-corporate
              method: POST
    - type: http
      namespace: pricing-engine
      baseUri: "https://pricing.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pricing_engine_token"
      resources:
        - name: corporate-rates
          path: "/corporate/calculate"
          operations:
            - name: calculate-corporate-rate
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://ing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST

Processes a credit card application by running credit scoring, verifying income via the payroll system, creating the card account in Temenos, and notifying the customer via WhatsApp.

naftiko: "0.5"
info:
  label: "Credit Card Application Orchestrator"
  description: "Processes a credit card application by running credit scoring, verifying income via the payroll system, creating the card account in Temenos, and notifying the customer via WhatsApp."
  tags:
    - banking
    - credit
    - temenos-transact
    - whatsapp
capability:
  exposes:
    - type: mcp
      namespace: credit-card-applications
      port: 8080
      tools:
        - name: process-application
          description: "Process a credit card application."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The customer ID."
            - name: requested_limit
              in: body
              type: string
              description: "Requested credit limit."
          steps:
            - name: run-credit-score
              type: call
              call: "credit-engine.score-customer"
              with:
                customer_id: "{{customer_id}}"
            - name: verify-income
              type: call
              call: "income-verification.check"
              with:
                customer_id: "{{customer_id}}"
            - name: create-card-account
              type: call
              call: "temenos.create-card-account"
              with:
                customer_id: "{{customer_id}}"
                credit_limit: "{{requested_limit}}"
                credit_score: "{{run-credit-score.score}}"
            - name: notify-customer
              type: call
              call: "whatsapp.send-message"
              with:
                phone: "{{run-credit-score.customer_phone}}"
                template: "card_approved"
                parameters: "{{create-card-account.card_number_masked}},{{create-card-account.credit_limit}}"
  consumes:
    - type: http
      namespace: credit-engine
      baseUri: "https://credit-scoring.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.credit_engine_token"
      resources:
        - name: scoring
          path: "/score"
          operations:
            - name: score-customer
              method: POST
    - type: http
      namespace: income-verification
      baseUri: "https://income-verify.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.income_verify_token"
      resources:
        - name: verification
          path: "/verify"
          operations:
            - name: check
              method: POST
    - type: http
      namespace: temenos
      baseUri: "https://core-banking.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.temenos_token"
      resources:
        - name: card-accounts
          path: "/cards/accounts"
          operations:
            - name: create-card-account
              method: POST
    - type: http
      namespace: whatsapp
      baseUri: "https://graph.facebook.com/v17.0"
      authentication:
        type: bearer
        token: "$secrets.whatsapp_token"
      resources:
        - name: messages
          path: "/{{phone_number_id}}/messages"
          inputParameters:
            - name: phone_number_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves the credit risk score for a customer from the internal risk engine, returning risk rating, probability of default, and exposure at default.

naftiko: "0.5"
info:
  label: "Credit Risk Score Retriever"
  description: "Retrieves the credit risk score for a customer from the internal risk engine, returning risk rating, probability of default, and exposure at default."
  tags:
    - risk
    - lending
    - banking
capability:
  exposes:
    - type: mcp
      namespace: credit-risk
      port: 8080
      tools:
        - name: get-credit-risk
          description: "Retrieve credit risk score for a customer."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The customer ID."
          call: "risk-engine.get-score"
          with:
            customer_id: "{{customer_id}}"
          outputParameters:
            - name: risk_rating
              type: string
              mapping: "$.riskRating"
            - name: probability_of_default
              type: string
              mapping: "$.probabilityOfDefault"
            - name: exposure_at_default
              type: string
              mapping: "$.exposureAtDefault"
            - name: last_assessed
              type: string
              mapping: "$.lastAssessmentDate"
  consumes:
    - type: http
      namespace: risk-engine
      baseUri: "https://risk-engine.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.risk_engine_token"
      resources:
        - name: scores
          path: "/credit/scores/{{customer_id}}"
          inputParameters:
            - name: customer_id
              in: path
          operations:
            - name: get-score
              method: GET

Screens cross-border payment transactions against international sanctions lists including EU, OFAC, and UN, flagging potential matches for compliance review.

naftiko: "0.5"
info:
  label: "Cross-Border Payment Sanctions Screener"
  description: "Screens cross-border payment transactions against international sanctions lists including EU, OFAC, and UN, flagging potential matches for compliance review."
  tags:
    - compliance
    - sanctions-screening
    - cross-border-payments
capability:
  exposes:
    - type: mcp
      namespace: sanctions-screening
      port: 8080
      tools:
        - name: screen-payment-sanctions
          description: "Screen a cross-border payment against sanctions lists."
          inputParameters:
            - name: payment_id
              in: body
              type: string
              description: "The payment transaction identifier."
            - name: beneficiary_name
              in: body
              type: string
              description: "Name of the payment beneficiary."
            - name: destination_country
              in: body
              type: string
              description: "ISO country code of the destination."
          call: "compliance-api.screen-sanctions"
          with:
            payment: "{{payment_id}}"
            beneficiary: "{{beneficiary_name}}"
            country: "{{destination_country}}"
          outputParameters:
            - name: screening_result
              type: string
              mapping: "$.screening.result"
            - name: matches_found
              type: integer
              mapping: "$.screening.matchesFound"
            - name: risk_level
              type: string
              mapping: "$.screening.riskLevel"
  consumes:
    - type: http
      namespace: compliance-api
      baseUri: "https://api.ing.com/compliance/v1"
      authentication:
        type: bearer
        token: "$secrets.ing_compliance_api_token"
      resources:
        - name: sanctions-checks
          path: "/sanctions-screening"
          operations:
            - name: screen-sanctions
              method: POST

Retrieves a customer's account balance and details from the core banking system, returning current balance, available balance, account type, and currency.

naftiko: "0.5"
info:
  label: "Customer Account Balance Lookup"
  description: "Retrieves a customer's account balance and details from the core banking system, returning current balance, available balance, account type, and currency."
  tags:
    - banking
    - accounts
    - temenos-transact
capability:
  exposes:
    - type: mcp
      namespace: account-banking
      port: 8080
      tools:
        - name: get-account-balance
          description: "Look up a customer account balance by account number."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The ING account number."
          call: "temenos.get-account"
          with:
            account_id: "{{account_id}}"
          outputParameters:
            - name: current_balance
              type: string
              mapping: "$.body.currentBalance"
            - name: available_balance
              type: string
              mapping: "$.body.availableBalance"
            - name: currency
              type: string
              mapping: "$.body.currency"
            - name: account_type
              type: string
              mapping: "$.body.accountType"
  consumes:
    - type: http
      namespace: temenos
      baseUri: "https://core-banking.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.temenos_token"
      resources:
        - name: accounts
          path: "/accounts/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET

Orchestrates new customer account opening by running KYC verification, creating the account in Temenos, provisioning digital banking access, and sending welcome notification via WhatsApp.

naftiko: "0.5"
info:
  label: "Customer Account Opening Orchestrator"
  description: "Orchestrates new customer account opening by running KYC verification, creating the account in Temenos, provisioning digital banking access, and sending welcome notification via WhatsApp."
  tags:
    - banking
    - onboarding
    - temenos-transact
    - whatsapp
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: account-opening
      port: 8080
      tools:
        - name: open-account
          description: "Orchestrate new customer account opening."
          inputParameters:
            - name: customer_name
              in: body
              type: string
              description: "The customer full name."
            - name: id_number
              in: body
              type: string
              description: "The national ID number."
            - name: phone
              in: body
              type: string
              description: "Customer phone number."
          steps:
            - name: verify-kyc
              type: call
              call: "compliance.kyc-check"
              with:
                name: "{{customer_name}}"
                id_number: "{{id_number}}"
            - name: create-account
              type: call
              call: "temenos.create-account"
              with:
                customer_name: "{{customer_name}}"
                kyc_reference: "{{verify-kyc.kyc_reference}}"
            - name: provision-digital
              type: call
              call: "digital-banking.provision-access"
              with:
                account_id: "{{create-account.account_id}}"
                phone: "{{phone}}"
            - name: send-welcome
              type: call
              call: "whatsapp.send-message"
              with:
                phone: "{{phone}}"
                template: "welcome_new_customer"
                parameters: "{{customer_name}},{{create-account.account_id}},{{create-account.iban}}"
  consumes:
    - type: http
      namespace: compliance
      baseUri: "https://compliance-screening.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.compliance_token"
      resources:
        - name: kyc
          path: "/kyc/verify"
          operations:
            - name: kyc-check
              method: POST
    - type: http
      namespace: temenos
      baseUri: "https://core-banking.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.temenos_token"
      resources:
        - name: accounts
          path: "/accounts"
          operations:
            - name: create-account
              method: POST
    - type: http
      namespace: digital-banking
      baseUri: "https://digital-banking.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.digital_banking_token"
      resources:
        - name: provisioning
          path: "/access/provision"
          operations:
            - name: provision-access
              method: POST
    - type: http
      namespace: whatsapp
      baseUri: "https://graph.facebook.com/v17.0"
      authentication:
        type: bearer
        token: "$secrets.whatsapp_token"
      resources:
        - name: messages
          path: "/{{phone_number_id}}/messages"
          inputParameters:
            - name: phone_number_id
              in: path
          operations:
            - name: send-message
              method: POST

When a customer complaint is logged in Salesforce, creates a ServiceNow escalation ticket, assigns a resolution owner, and notifies the customer via WhatsApp with a case number.

naftiko: "0.5"
info:
  label: "Customer Complaint Resolution Pipeline"
  description: "When a customer complaint is logged in Salesforce, creates a ServiceNow escalation ticket, assigns a resolution owner, and notifies the customer via WhatsApp with a case number."
  tags:
    - customer-service
    - banking
    - salesforce
    - servicenow
    - whatsapp
capability:
  exposes:
    - type: mcp
      namespace: complaint-resolution
      port: 8080
      tools:
        - name: process-complaint
          description: "Process a customer complaint through Salesforce, ServiceNow, and WhatsApp notification."
          inputParameters:
            - name: case_id
              in: body
              type: string
              description: "Salesforce case ID."
          steps:
            - name: get-case
              type: call
              call: "salesforce.get-case"
              with:
                case_id: "{{case_id}}"
            - name: escalate
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Customer complaint: {{get-case.Subject}}"
                priority: "{{get-case.Priority}}"
                category: "customer_complaint"
                description: "{{get-case.Description}}"
            - name: notify-customer
              type: call
              call: "whatsapp.send-message"
              with:
                phone: "{{get-case.customer_phone}}"
                template: "complaint_received"
                parameters: "{{escalate.number}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://ing.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case/{{case_id}}"
          inputParameters:
            - name: case_id
              in: path
          operations:
            - name: get-case
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://ing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: whatsapp
      baseUri: "https://graph.facebook.com/v17.0"
      authentication:
        type: bearer
        token: "$secrets.whatsapp_token"
      resources:
        - name: messages
          path: "/{{phone_number_id}}/messages"
          inputParameters:
            - name: phone_number_id
              in: path
          operations:
            - name: send-message
              method: POST

Queries Datadog for infrastructure health metrics of ING's banking platform.

naftiko: "0.5"
info:
  label: "Datadog Platform Health Monitor"
  description: "Queries Datadog for infrastructure health metrics of ING's banking platform."
  tags:
    - it-operations
    - monitoring
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: infra-monitoring
      port: 8080
      tools:
        - name: get-platform-health
          description: "Retrieve infrastructure health from Datadog."
          inputParameters:
            - name: service
              in: body
              type: string
              description: "Service name."
          call: "datadog.query-metrics"
          with:
            query: "avg:system.cpu.user{service:{{service}}}"
          outputParameters:
            - name: cpu_utilization
              type: string
              mapping: "$.series[0].pointlist[-1][1]"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        name: "DD-API-KEY"
        in: header
        value: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/query"
          inputParameters:
            - name: query
              in: query
          operations:
            - name: query-metrics
              method: GET

Compares ING mortgage rate offerings against market rates for Dutch residential properties, factoring in NHG guarantees, fixed-rate periods, and customer loyalty discounts.

naftiko: "0.5"
info:
  label: "Dutch Mortgage Rate Comparison Tool"
  description: "Compares ING mortgage rate offerings against market rates for Dutch residential properties, factoring in NHG guarantees, fixed-rate periods, and customer loyalty discounts."
  tags:
    - mortgages
    - retail-banking
    - rate-comparison
capability:
  exposes:
    - type: mcp
      namespace: mortgage-rates
      port: 8080
      tools:
        - name: compare-mortgage-rates
          description: "Compare current ING mortgage rates with market averages."
          inputParameters:
            - name: property_value
              in: body
              type: number
              description: "Property value in EUR."
            - name: loan_amount
              in: body
              type: number
              description: "Requested mortgage amount in EUR."
            - name: fixed_rate_period
              in: body
              type: integer
              description: "Fixed rate period in years such as 5, 10, 20, or 30."
            - name: nhg_eligible
              in: body
              type: boolean
              description: "Whether the mortgage qualifies for NHG guarantee."
          call: "mortgage-api.compare-rates"
          with:
            property_value: "{{property_value}}"
            loan: "{{loan_amount}}"
            period: "{{fixed_rate_period}}"
            nhg: "{{nhg_eligible}}"
          outputParameters:
            - name: ing_rate
              type: number
              mapping: "$.comparison.ingRate"
            - name: market_average
              type: number
              mapping: "$.comparison.marketAverage"
            - name: monthly_payment
              type: number
              mapping: "$.comparison.monthlyPayment"
  consumes:
    - type: http
      namespace: mortgage-api
      baseUri: "https://api.ing.com/mortgages/v1"
      authentication:
        type: bearer
        token: "$secrets.ing_mortgage_api_token"
      resources:
        - name: rate-comparisons
          path: "/rate-comparisons"
          operations:
            - name: compare-rates
              method: POST

Retrieves mobile banking application performance from Dynatrace, returning crash rate, session duration, API response time, and user satisfaction score.

naftiko: "0.5"
info:
  label: "Dynatrace Banking App Performance"
  description: "Retrieves mobile banking application performance from Dynatrace, returning crash rate, session duration, API response time, and user satisfaction score."
  tags:
    - monitoring
    - dynatrace
    - mobile-banking
capability:
  exposes:
    - type: mcp
      namespace: mobile-app-performance
      port: 8080
      tools:
        - name: get-app-performance
          description: "Retrieve mobile banking app performance from Dynatrace."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "The Dynatrace mobile app ID."
          call: "dynatrace.get-app-metrics"
          with:
            app_id: "{{app_id}}"
          outputParameters:
            - name: crash_rate
              type: string
              mapping: "$.result[0].data[0].values.crashRate"
            - name: avg_session_duration
              type: string
              mapping: "$.result[0].data[0].values.sessionDuration"
            - name: api_response_time
              type: string
              mapping: "$.result[0].data[0].values.apiResponseTime"
  consumes:
    - type: http
      namespace: dynatrace
      baseUri: "https://ing.live.dynatrace.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.dynatrace_token"
      resources:
        - name: metrics
          path: "/metrics/query?entitySelector=type(MOBILE_APPLICATION),entityId({{app_id}})"
          inputParameters:
            - name: app_id
              in: query
          operations:
            - name: get-app-metrics
              method: GET

Queries Elasticsearch for audit log entries across ING systems, returning event count, top actions, user activity summary, and time range coverage.

naftiko: "0.5"
info:
  label: "Elasticsearch Audit Log Query"
  description: "Queries Elasticsearch for audit log entries across ING systems, returning event count, top actions, user activity summary, and time range coverage."
  tags:
    - security
    - audit
    - elasticsearch
capability:
  exposes:
    - type: mcp
      namespace: audit-logs
      port: 8080
      tools:
        - name: query-audit-logs
          description: "Query audit log entries from Elasticsearch."
          inputParameters:
            - name: index
              in: body
              type: string
              description: "The Elasticsearch audit log index."
            - name: time_range
              in: body
              type: string
              description: "The time range (e.g. 24h, 7d)."
          call: "elasticsearch.search"
          with:
            index: "{{index}}"
            time_range: "{{time_range}}"
          outputParameters:
            - name: total_events
              type: number
              mapping: "$.hits.total.value"
            - name: top_actions
              type: string
              mapping: "$.aggregations.actions.buckets"
            - name: unique_users
              type: number
              mapping: "$.aggregations.users.value"
  consumes:
    - type: http
      namespace: elasticsearch
      baseUri: "https://elasticsearch.ing.com"
      authentication:
        type: basic
        username: "$secrets.es_user"
        password: "$secrets.es_password"
      resources:
        - name: search
          path: "/{{index}}/_search"
          inputParameters:
            - name: index
              in: path
          operations:
            - name: search
              method: POST

On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions SharePoint folder, and sends Teams welcome.

naftiko: "0.5"
info:
  label: "Employee Onboarding Orchestrator"
  description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions SharePoint folder, and sends Teams welcome."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Orchestrate onboarding for a new ING employee."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "Workday worker ID."
            - name: start_date
              in: body
              type: string
              description: "Start date YYYY-MM-DD."
            - name: department
              in: body
              type: string
              description: "Department name."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{worker_id}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Onboarding: {{get-employee.full_name}} - {{department}}"
                category: "hr_onboarding"
                assigned_group: "IT_Onboarding"
            - name: provision-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "hr_onboarding"
                folder_path: "NewHires/{{get-employee.full_name}}_{{start_date}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.work_email}}"
                text: "Welcome to ING, {{get-employee.first_name}}! Ticket: {{open-ticket.number}}. Docs: {{provision-folder.url}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://ing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: 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: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Screens investment portfolios for ESG compliance by querying positions from Murex, running ESG scoring via the sustainability platform, generating the report in Google Sheets, and notifying stakeholders via Microsoft Teams.

naftiko: "0.5"
info:
  label: "ESG Screening and Reporting Pipeline"
  description: "Screens investment portfolios for ESG compliance by querying positions from Murex, running ESG scoring via the sustainability platform, generating the report in Google Sheets, and notifying stakeholders via Microsoft Teams."
  tags:
    - sustainability
    - esg
    - murex
    - google-sheets
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: esg-screening
      port: 8080
      tools:
        - name: screen-portfolio-esg
          description: "Screen a portfolio for ESG compliance and generate report."
          inputParameters:
            - name: portfolio_id
              in: body
              type: string
              description: "The portfolio ID."
            - name: reporting_date
              in: body
              type: string
              description: "The reporting date."
          steps:
            - name: get-positions
              type: call
              call: "murex.get-portfolio-positions"
              with:
                portfolio_id: "{{portfolio_id}}"
            - name: run-esg-scoring
              type: call
              call: "sustainability-platform.score-portfolio"
              with:
                portfolio_id: "{{portfolio_id}}"
                position_count: "{{get-positions.position_count}}"
            - name: generate-report
              type: call
              call: "gsheets.append-data"
              with:
                spreadsheet_id: "ESG_Reports"
                data: "{{portfolio_id}},{{reporting_date}},{{run-esg-scoring.overall_score}},{{run-esg-scoring.exclusion_count}}"
            - name: notify-stakeholders
              type: call
              call: "teams.send-message"
              with:
                channel: "ESG_Compliance"
                message: "ESG screening complete for portfolio {{portfolio_id}}. Score: {{run-esg-scoring.overall_score}}. Exclusions: {{run-esg-scoring.exclusion_count}}."
  consumes:
    - type: http
      namespace: murex
      baseUri: "https://murex.ing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.murex_token"
      resources:
        - name: portfolios
          path: "/portfolios/{{portfolio_id}}/positions"
          inputParameters:
            - name: portfolio_id
              in: path
          operations:
            - name: get-portfolio-positions
              method: GET
    - type: http
      namespace: sustainability-platform
      baseUri: "https://sustainability.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sustainability_token"
      resources:
        - name: scoring
          path: "/esg/score"
          operations:
            - name: score-portfolio
              method: POST
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_api_token"
      resources:
        - name: values
          path: "/spreadsheets/{{spreadsheet_id}}/values/Sheet1:append"
          inputParameters:
            - name: spreadsheet_id
              in: path
          operations:
            - name: append-data
              method: POST
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves market data from FactSet for ING investment analysis, returning current price, daily change, volume, and 52-week range for a given security.

naftiko: "0.5"
info:
  label: "FactSet Market Data Retriever"
  description: "Retrieves market data from FactSet for ING investment analysis, returning current price, daily change, volume, and 52-week range for a given security."
  tags:
    - market-data
    - factset
    - trading
capability:
  exposes:
    - type: mcp
      namespace: market-data
      port: 8080
      tools:
        - name: get-market-data
          description: "Retrieve market data from FactSet for a security."
          inputParameters:
            - name: ticker
              in: body
              type: string
              description: "The security ticker symbol."
          call: "factset.get-quote"
          with:
            ticker: "{{ticker}}"
          outputParameters:
            - name: price
              type: string
              mapping: "$.data[0].price"
            - name: daily_change
              type: string
              mapping: "$.data[0].change"
            - name: volume
              type: number
              mapping: "$.data[0].volume"
            - name: range_52w
              type: string
              mapping: "$.data[0].range52Week"
  consumes:
    - type: http
      namespace: factset
      baseUri: "https://api.factset.com/content/factset-prices/v1"
      authentication:
        type: basic
        username: "$secrets.factset_user"
        password: "$secrets.factset_password"
      resources:
        - name: quotes
          path: "/prices?ids={{ticker}}"
          inputParameters:
            - name: ticker
              in: query
          operations:
            - name: get-quote
              method: GET

Retrieves current FX rates from the treasury system, returning bid, ask, and mid rates for a currency pair.

naftiko: "0.5"
info:
  label: "Foreign Exchange Rate Lookup"
  description: "Retrieves current FX rates from the treasury system, returning bid, ask, and mid rates for a currency pair."
  tags:
    - banking
    - treasury
    - foreign-exchange
capability:
  exposes:
    - type: mcp
      namespace: fx-rates
      port: 8080
      tools:
        - name: get-fx-rate
          description: "Look up FX rate for a currency pair."
          inputParameters:
            - name: base_currency
              in: body
              type: string
              description: "Base currency code."
            - name: quote_currency
              in: body
              type: string
              description: "Quote currency code."
          call: "treasury.get-rate"
          with:
            base: "{{base_currency}}"
            quote: "{{quote_currency}}"
          outputParameters:
            - name: bid
              type: string
              mapping: "$.bid"
            - name: ask
              type: string
              mapping: "$.ask"
            - name: mid
              type: string
              mapping: "$.mid"
  consumes:
    - type: http
      namespace: treasury
      baseUri: "https://treasury.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.treasury_token"
      resources:
        - name: fx-rates
          path: "/rates/{{base}}/{{quote}}"
          inputParameters:
            - name: base
              in: path
            - name: quote
              in: path
          operations:
            - name: get-rate
              method: GET

When a fraud alert is triggered, retrieves card transaction details, blocks the card via the banking platform, creates a case in ServiceNow, and notifies the customer via WhatsApp.

naftiko: "0.5"
info:
  label: "Fraud Detection Alert Processor"
  description: "When a fraud alert is triggered, retrieves card transaction details, blocks the card via the banking platform, creates a case in ServiceNow, and notifies the customer via WhatsApp."
  tags:
    - risk
    - banking
    - compliance
    - servicenow
    - whatsapp
capability:
  exposes:
    - type: mcp
      namespace: fraud-detection
      port: 8080
      tools:
        - name: process-fraud-alert
          description: "Handle a fraud detection alert across card blocking, case creation, and notification."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "Fraud alert ID."
            - name: card_number_masked
              in: body
              type: string
              description: "Masked card number."
          steps:
            - name: get-alert
              type: call
              call: "fraud-system.get-alert"
              with:
                alert_id: "{{alert_id}}"
            - name: block-card
              type: call
              call: "temenos.block-card"
              with:
                card_id: "{{get-alert.card_id}}"
                reason: "fraud_suspected"
            - name: create-case
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Fraud alert: Card {{card_number_masked}} - {{get-alert.alert_type}}"
                priority: "1"
                category: "fraud_investigation"
            - name: notify-customer
              type: call
              call: "whatsapp.send-message"
              with:
                phone: "{{get-alert.customer_phone}}"
                template: "fraud_alert"
                parameters: "{{card_number_masked}},{{get-alert.transaction_amount}}"
  consumes:
    - type: http
      namespace: fraud-system
      baseUri: "https://fraud-detection.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fraud_system_token"
      resources:
        - name: alerts
          path: "/alerts/{{alert_id}}"
          inputParameters:
            - name: alert_id
              in: path
          operations:
            - name: get-alert
              method: GET
    - type: http
      namespace: temenos
      baseUri: "https://core-banking.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.temenos_token"
      resources:
        - name: cards
          path: "/cards/{{card_id}}/block"
          inputParameters:
            - name: card_id
              in: path
          operations:
            - name: block-card
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://ing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: whatsapp
      baseUri: "https://graph.facebook.com/v17.0"
      authentication:
        type: bearer
        token: "$secrets.whatsapp_token"
      resources:
        - name: messages
          path: "/{{phone_number_id}}/messages"
          inputParameters:
            - name: phone_number_id
              in: path
          operations:
            - name: send-message
              method: POST

Triggers a GitHub Actions deployment workflow for ING banking applications.

naftiko: "0.5"
info:
  label: "GitHub Actions Deployment Trigger"
  description: "Triggers a GitHub Actions deployment workflow for ING banking applications."
  tags:
    - it-operations
    - cicd
    - github-actions
capability:
  exposes:
    - type: mcp
      namespace: deployments
      port: 8080
      tools:
        - name: trigger-deployment
          description: "Trigger a GitHub Actions deployment."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "GitHub repository."
            - name: workflow_id
              in: body
              type: string
              description: "Workflow ID."
            - name: ref
              in: body
              type: string
              description: "Git ref."
          call: "github.trigger-workflow"
          with:
            repo: "{{repo}}"
            workflow_id: "{{workflow_id}}"
            ref: "{{ref}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflows
          path: "/repos/{{repo}}/actions/workflows/{{workflow_id}}/dispatches"
          inputParameters:
            - name: repo
              in: path
            - name: workflow_id
              in: path
          operations:
            - name: trigger-workflow
              method: POST

Retrieves GitHub Copilot usage analytics for ING engineering teams, returning active users, suggestion acceptance rate, and lines of code generated.

naftiko: "0.5"
info:
  label: "GitHub Copilot Usage Analytics"
  description: "Retrieves GitHub Copilot usage analytics for ING engineering teams, returning active users, suggestion acceptance rate, and lines of code generated."
  tags:
    - development
    - github-copilot
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: copilot-analytics
      port: 8080
      tools:
        - name: get-copilot-usage
          description: "Retrieve GitHub Copilot usage analytics."
          inputParameters:
            - name: org_name
              in: body
              type: string
              description: "The GitHub organization name."
          call: "github.get-copilot-usage"
          with:
            org_name: "{{org_name}}"
          outputParameters:
            - name: active_users
              type: number
              mapping: "$.totalActiveUsers"
            - name: acceptance_rate
              type: string
              mapping: "$.acceptanceRate"
            - name: lines_generated
              type: number
              mapping: "$.totalLinesGenerated"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: copilot
          path: "/orgs/{{org_name}}/copilot/usage"
          inputParameters:
            - name: org_name
              in: path
          operations:
            - name: get-copilot-usage
              method: GET

Queries Google BigQuery for ING data analytics, returning query results, rows processed, and bytes billed for business intelligence reporting.

naftiko: "0.5"
info:
  label: "Google Cloud BigQuery Analytics"
  description: "Queries Google BigQuery for ING data analytics, returning query results, rows processed, and bytes billed for business intelligence reporting."
  tags:
    - analytics
    - google-cloud-platform
    - data
capability:
  exposes:
    - type: mcp
      namespace: bigquery-analytics
      port: 8080
      tools:
        - name: run-query
          description: "Execute a BigQuery analytics query."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "The SQL query to execute."
          call: "bigquery.execute-query"
          with:
            query: "{{query}}"
          outputParameters:
            - name: total_rows
              type: number
              mapping: "$.totalRows"
            - name: bytes_billed
              type: string
              mapping: "$.totalBytesProcessed"
            - name: results
              type: string
              mapping: "$.rows"
  consumes:
    - type: http
      namespace: bigquery
      baseUri: "https://bigquery.googleapis.com/bigquery/v2"
      authentication:
        type: bearer
        token: "$secrets.gcp_token"
      resources:
        - name: queries
          path: "/projects/{{project_id}}/queries"
          inputParameters:
            - name: project_id
              in: path
          operations:
            - name: execute-query
              method: POST

Searches for documents in ING's shared Google Drive.

naftiko: "0.5"
info:
  label: "Google Drive Document Finder"
  description: "Searches for documents in ING's shared Google Drive."
  tags:
    - documents
    - google-drive
capability:
  exposes:
    - type: mcp
      namespace: gdrive-search
      port: 8080
      tools:
        - name: search-docs
          description: "Search for documents in Google Drive."
          inputParameters:
            - name: search_query
              in: body
              type: string
              description: "Search query."
          call: "gdrive.search-files"
          with:
            query: "{{search_query}}"
          outputParameters:
            - name: files
              type: string
              mapping: "$.files"
  consumes:
    - type: http
      namespace: gdrive
      baseUri: "https://www.googleapis.com/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_drive_token"
      resources:
        - name: files
          path: "/files"
          inputParameters:
            - name: q
              in: query
              value: "name contains '{{query}}'"
          operations:
            - name: search-files
              method: GET

Checks Google Pay token status for an ING card.

naftiko: "0.5"
info:
  label: "Google Pay Integration Status"
  description: "Checks Google Pay token status for an ING card."
  tags:
    - payments
    - mobile-banking
    - google-pay
capability:
  exposes:
    - type: mcp
      namespace: gpay-status
      port: 8080
      tools:
        - name: get-gpay-status
          description: "Check Google Pay status for a card."
          inputParameters:
            - name: card_id
              in: body
              type: string
              description: "Card identifier."
          call: "google-pay.get-token-status"
          with:
            card_id: "{{card_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.tokenStatus"
            - name: active_tokens
              type: string
              mapping: "$.activeTokenCount"
  consumes:
    - type: http
      namespace: google-pay
      baseUri: "https://mobile-payments.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.google_pay_token"
      resources:
        - name: tokens
          path: "/cards/{{card_id}}/google-pay"
          inputParameters:
            - name: card_id
              in: path
          operations:
            - name: get-token-status
              method: GET

Logs environmental, social, and governance metrics to a Google Sheet for ING's sustainability reporting.

naftiko: "0.5"
info:
  label: "Google Sheets ESG Metrics Logger"
  description: "Logs environmental, social, and governance metrics to a Google Sheet for ING's sustainability reporting."
  tags:
    - sustainability
    - compliance
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: esg-tracking
      port: 8080
      tools:
        - name: log-esg-metrics
          description: "Log ESG metrics to Google Sheets."
          inputParameters:
            - name: quarter
              in: body
              type: string
              description: "Quarter (YYYY-QN)."
            - name: co2_emissions
              in: body
              type: string
              description: "CO2 emissions in tonnes."
            - name: green_financing
              in: body
              type: string
              description: "Green financing volume in EUR."
          call: "gsheets.append-row"
          with:
            spreadsheet_id: "esg_reporting"
            range: "Metrics!A:C"
            values: "{{quarter}},{{co2_emissions}},{{green_financing}}"
  consumes:
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets/{{spreadsheet_id}}/values/{{range}}:append"
          inputParameters:
            - name: spreadsheet_id
              in: path
            - name: range
              in: path
          operations:
            - name: append-row
              method: POST

Retrieves and rotates secrets from HashiCorp Vault for ING application credential management, returning current secret version, rotation timestamp, and lease duration.

naftiko: "0.5"
info:
  label: "HashiCorp Vault Secret Rotation"
  description: "Retrieves and rotates secrets from HashiCorp Vault for ING application credential management, returning current secret version, rotation timestamp, and lease duration."
  tags:
    - security
    - hashicorp-vault
capability:
  exposes:
    - type: mcp
      namespace: secret-rotation
      port: 8080
      tools:
        - name: rotate-secret
          description: "Rotate a secret in HashiCorp Vault."
          inputParameters:
            - name: secret_path
              in: body
              type: string
              description: "The Vault secret path."
          call: "vault.rotate-secret"
          with:
            secret_path: "{{secret_path}}"
          outputParameters:
            - name: version
              type: number
              mapping: "$.data.metadata.version"
            - name: rotated_at
              type: string
              mapping: "$.data.metadata.created_time"
            - name: lease_duration
              type: number
              mapping: "$.lease_duration"
  consumes:
    - type: http
      namespace: vault
      baseUri: "https://vault.ing.com/v1"
      authentication:
        type: bearer
        token: "$secrets.vault_token"
      resources:
        - name: secrets
          path: "/secret/data/{{secret_path}}"
          inputParameters:
            - name: secret_path
              in: path
          operations:
            - name: rotate-secret
              method: POST

Retrieves a prospect lead from HubSpot for ING corporate banking outreach.

naftiko: "0.5"
info:
  label: "HubSpot Lead Enrichment"
  description: "Retrieves a prospect lead from HubSpot for ING corporate banking outreach."
  tags:
    - sales
    - marketing
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: lead-management
      port: 8080
      tools:
        - name: get-lead
          description: "Retrieve a HubSpot lead."
          inputParameters:
            - name: contact_id
              in: body
              type: string
              description: "HubSpot contact ID."
          call: "hubspot.get-contact"
          with:
            contact_id: "{{contact_id}}"
          outputParameters:
            - name: company
              type: string
              mapping: "$.properties.company"
            - name: email
              type: string
              mapping: "$.properties.email"
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/crm/v3/objects/contacts/{{contact_id}}"
          inputParameters:
            - name: contact_id
              in: path
          operations:
            - name: get-contact
              method: GET

Checks the status of iDEAL payment transactions processed through ING, providing real-time settlement confirmation and reconciliation data for merchants.

naftiko: "0.5"
info:
  label: "iDEAL Payment Gateway Status Checker"
  description: "Checks the status of iDEAL payment transactions processed through ING, providing real-time settlement confirmation and reconciliation data for merchants."
  tags:
    - payments
    - ideal
    - merchant-services
capability:
  exposes:
    - type: mcp
      namespace: ideal-payments
      port: 8080
      tools:
        - name: check-ideal-payment-status
          description: "Check the status of an iDEAL payment transaction."
          inputParameters:
            - name: transaction_id
              in: body
              type: string
              description: "The iDEAL transaction identifier."
            - name: merchant_id
              in: body
              type: string
              description: "The ING merchant account identifier."
          call: "payments-api.get-ideal-status"
          with:
            transaction: "{{transaction_id}}"
            merchant: "{{merchant_id}}"
          outputParameters:
            - name: payment_status
              type: string
              mapping: "$.payment.status"
            - name: amount
              type: number
              mapping: "$.payment.amount"
            - name: settlement_date
              type: string
              mapping: "$.payment.settlementDate"
  consumes:
    - type: http
      namespace: payments-api
      baseUri: "https://api.ing.com/payments/v1"
      authentication:
        type: bearer
        token: "$secrets.ing_payments_api_token"
      resources:
        - name: ideal-transactions
          path: "/ideal/transactions/{{transaction}}"
          inputParameters:
            - name: transaction
              in: path
          operations:
            - name: get-ideal-status
              method: GET

Calculates instant loan pre-approval amounts for ING retail customers based on income verification, credit scoring, and existing debt obligations.

naftiko: "0.5"
info:
  label: "Instant Loan Pre-Approval Calculator"
  description: "Calculates instant loan pre-approval amounts for ING retail customers based on income verification, credit scoring, and existing debt obligations."
  tags:
    - lending
    - credit-scoring
    - retail-banking
capability:
  exposes:
    - type: mcp
      namespace: loan-preapproval
      port: 8080
      tools:
        - name: calculate-preapproval
          description: "Calculate instant loan pre-approval for a customer."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The ING customer identifier."
            - name: loan_type
              in: body
              type: string
              description: "Loan type such as personal, auto, or home-improvement."
            - name: requested_amount
              in: body
              type: number
              description: "Requested loan amount in EUR."
          call: "lending-api.calculate-preapproval"
          with:
            customer: "{{customer_id}}"
            type: "{{loan_type}}"
            amount: "{{requested_amount}}"
          outputParameters:
            - name: approved_amount
              type: number
              mapping: "$.preapproval.approvedAmount"
            - name: interest_rate
              type: number
              mapping: "$.preapproval.interestRate"
            - name: monthly_payment
              type: number
              mapping: "$.preapproval.monthlyPayment"
  consumes:
    - type: http
      namespace: lending-api
      baseUri: "https://api.ing.com/lending/v1"
      authentication:
        type: bearer
        token: "$secrets.ing_lending_api_token"
      resources:
        - name: preapprovals
          path: "/preapprovals"
          operations:
            - name: calculate-preapproval
              method: POST

Processes an instant payment by validating the sender account in Temenos, running fraud detection, executing the payment, and sending a push notification to the customer via the mobile banking API.

naftiko: "0.5"
info:
  label: "Instant Payment with Fraud Screening Orchestrator"
  description: "Processes an instant payment by validating the sender account in Temenos, running fraud detection, executing the payment, and sending a push notification to the customer via the mobile banking API."
  tags:
    - payments
    - fraud-detection
    - temenos-transact
    - banking
capability:
  exposes:
    - type: mcp
      namespace: instant-payments
      port: 8080
      tools:
        - name: process-instant-payment
          description: "Process an instant payment with fraud screening."
          inputParameters:
            - name: sender_account
              in: body
              type: string
              description: "Sender account number."
            - name: recipient_iban
              in: body
              type: string
              description: "Recipient IBAN."
            - name: amount
              in: body
              type: string
              description: "Payment amount."
          steps:
            - name: validate-account
              type: call
              call: "temenos.get-account"
              with:
                account_id: "{{sender_account}}"
            - name: screen-fraud
              type: call
              call: "fraud-engine.screen-payment"
              with:
                sender: "{{sender_account}}"
                recipient: "{{recipient_iban}}"
                amount: "{{amount}}"
            - name: execute-payment
              type: call
              call: "temenos.create-instant-payment"
              with:
                debit_account: "{{sender_account}}"
                credit_iban: "{{recipient_iban}}"
                amount: "{{amount}}"
            - name: notify-customer
              type: call
              call: "mobile-api.send-push"
              with:
                account_id: "{{sender_account}}"
                message: "Payment of {{amount}} EUR to {{recipient_iban}} completed. Ref: {{execute-payment.reference}}."
  consumes:
    - type: http
      namespace: temenos
      baseUri: "https://core-banking.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.temenos_token"
      resources:
        - name: accounts
          path: "/accounts/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET
        - name: instant-payments
          path: "/payments/instant"
          operations:
            - name: create-instant-payment
              method: POST
    - type: http
      namespace: fraud-engine
      baseUri: "https://fraud-detection.ing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.fraud_engine_token"
      resources:
        - name: screening
          path: "/screen"
          operations:
            - name: screen-payment
              method: POST
    - type: http
      namespace: mobile-api
      baseUri: "https://mobile-banking.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.mobile_api_token"
      resources:
        - name: notifications
          path: "/push/send"
          operations:
            - name: send-push
              method: POST

Orchestrates portfolio rebalancing for ING wealth clients by analyzing current allocations in Murex, generating trade orders, executing via the trading platform, and reporting results to the relationship manager via Salesforce.

naftiko: "0.5"
info:
  label: "Investment Portfolio Rebalancing Orchestrator"
  description: "Orchestrates portfolio rebalancing for ING wealth clients by analyzing current allocations in Murex, generating trade orders, executing via the trading platform, and reporting results to the relationship manager via Salesforce."
  tags:
    - wealth-management
    - trading
    - murex
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: portfolio-rebalancing
      port: 8080
      tools:
        - name: rebalance-portfolio
          description: "Orchestrate portfolio rebalancing for a wealth client."
          inputParameters:
            - name: portfolio_id
              in: body
              type: string
              description: "The portfolio ID."
            - name: target_model
              in: body
              type: string
              description: "The target allocation model."
          steps:
            - name: analyze-allocation
              type: call
              call: "murex.get-portfolio-positions"
              with:
                portfolio_id: "{{portfolio_id}}"
            - name: generate-orders
              type: call
              call: "rebalancing-engine.calculate-trades"
              with:
                portfolio_id: "{{portfolio_id}}"
                target_model: "{{target_model}}"
                current_positions: "{{analyze-allocation.positions}}"
            - name: execute-trades
              type: call
              call: "trading-platform.execute-orders"
              with:
                order_list: "{{generate-orders.trade_list}}"
            - name: update-rm
              type: call
              call: "salesforce.create-activity"
              with:
                subject: "Portfolio {{portfolio_id}} rebalanced to {{target_model}}"
                description: "Trades executed: {{execute-trades.trade_count}}. Net turnover: {{execute-trades.net_turnover}}."
  consumes:
    - type: http
      namespace: murex
      baseUri: "https://murex.ing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.murex_token"
      resources:
        - name: portfolios
          path: "/portfolios/{{portfolio_id}}/positions"
          inputParameters:
            - name: portfolio_id
              in: path
          operations:
            - name: get-portfolio-positions
              method: GET
    - type: http
      namespace: rebalancing-engine
      baseUri: "https://rebalancing.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.rebalancing_token"
      resources:
        - name: calculations
          path: "/calculate"
          operations:
            - name: calculate-trades
              method: POST
    - type: http
      namespace: trading-platform
      baseUri: "https://trading.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.trading_token"
      resources:
        - name: orders
          path: "/orders/execute"
          operations:
            - name: execute-orders
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://ing.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: activities
          path: "/sobjects/Task"
          operations:
            - name: create-activity
              method: POST

Retrieves current sprint status from Jira for ING engineering teams, returning sprint name, story points completed, remaining work, and burndown velocity.

naftiko: "0.5"
info:
  label: "Jira Project Sprint Status"
  description: "Retrieves current sprint status from Jira for ING engineering teams, returning sprint name, story points completed, remaining work, and burndown velocity."
  tags:
    - development
    - jira
capability:
  exposes:
    - type: mcp
      namespace: sprint-tracking
      port: 8080
      tools:
        - name: get-sprint-status
          description: "Look up current sprint status in Jira."
          inputParameters:
            - name: board_id
              in: body
              type: string
              description: "The Jira board ID."
          call: "jira.get-sprint"
          with:
            board_id: "{{board_id}}"
          outputParameters:
            - name: sprint_name
              type: string
              mapping: "$.values[0].name"
            - name: completed_points
              type: number
              mapping: "$.values[0].completedPoints"
            - name: remaining_points
              type: number
              mapping: "$.values[0].remainingPoints"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://ing.atlassian.net/rest/agile/1.0"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_token"
      resources:
        - name: sprints
          path: "/board/{{board_id}}/sprint?state=active"
          inputParameters:
            - name: board_id
              in: path
          operations:
            - name: get-sprint
              method: GET

Retrieves treasury position details from the Kondor system for fixed income and derivatives portfolios.

naftiko: "0.5"
info:
  label: "Kondor Treasury Position Lookup"
  description: "Retrieves treasury position details from the Kondor system for fixed income and derivatives portfolios."
  tags:
    - banking
    - treasury
    - kondor
capability:
  exposes:
    - type: mcp
      namespace: treasury-positions
      port: 8080
      tools:
        - name: get-position
          description: "Look up a treasury position in Kondor."
          inputParameters:
            - name: position_id
              in: body
              type: string
              description: "Kondor position ID."
          call: "kondor.get-position"
          with:
            position_id: "{{position_id}}"
          outputParameters:
            - name: instrument
              type: string
              mapping: "$.instrumentName"
            - name: notional
              type: string
              mapping: "$.notionalAmount"
            - name: market_value
              type: string
              mapping: "$.marketValue"
  consumes:
    - type: http
      namespace: kondor
      baseUri: "https://kondor.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kondor_token"
      resources:
        - name: positions
          path: "/positions/{{position_id}}"
          inputParameters:
            - name: position_id
              in: path
          operations:
            - name: get-position
              method: GET

When a new customer account is opened, runs KYC verification checks, updates the customer profile in the CRM, and logs the verification outcome in ServiceNow.

naftiko: "0.5"
info:
  label: "KYC Customer Verification Orchestrator"
  description: "When a new customer account is opened, runs KYC verification checks, updates the customer profile in the CRM, and logs the verification outcome in ServiceNow."
  tags:
    - compliance
    - banking
    - know-your-customer
    - salesforce
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: kyc-verification
      port: 8080
      tools:
        - name: run-kyc-check
          description: "Orchestrate KYC verification for a new customer."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The customer ID."
            - name: full_name
              in: body
              type: string
              description: "Customer full name."
            - name: date_of_birth
              in: body
              type: string
              description: "Date of birth YYYY-MM-DD."
            - name: nationality
              in: body
              type: string
              description: "Customer nationality."
          steps:
            - name: verify-identity
              type: call
              call: "kyc.verify-customer"
              with:
                name: "{{full_name}}"
                dob: "{{date_of_birth}}"
                nationality: "{{nationality}}"
            - name: update-crm
              type: call
              call: "salesforce.update-contact"
              with:
                customer_id: "{{customer_id}}"
                kyc_status: "{{verify-identity.result}}"
                kyc_date: "{{verify-identity.verification_date}}"
            - name: log-outcome
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "KYC verification: {{full_name}} - {{verify-identity.result}}"
                category: "kyc_compliance"
                description: "Customer: {{customer_id}}. Result: {{verify-identity.result}}. Risk score: {{verify-identity.risk_score}}"
  consumes:
    - type: http
      namespace: kyc
      baseUri: "https://kyc-platform.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kyc_token"
      resources:
        - name: verifications
          path: "/verify"
          operations:
            - name: verify-customer
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://ing.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact/{{customer_id}}"
          inputParameters:
            - name: customer_id
              in: path
          operations:
            - name: update-contact
              method: PATCH
    - type: http
      namespace: servicenow
      baseUri: "https://ing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Creates a job posting on LinkedIn from Workday requisition data and notifies recruiters.

naftiko: "0.5"
info:
  label: "LinkedIn Job Posting Publisher"
  description: "Creates a job posting on LinkedIn from Workday requisition data and notifies recruiters."
  tags:
    - hr
    - recruiting
    - linkedin
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: job-posting
      port: 8080
      tools:
        - name: publish-job
          description: "Publish a Workday requisition to LinkedIn."
          inputParameters:
            - name: requisition_id
              in: body
              type: string
              description: "Workday requisition ID."
          steps:
            - name: get-req
              type: call
              call: "workday.get-requisition"
              with:
                requisition_id: "{{requisition_id}}"
            - name: post-job
              type: call
              call: "linkedin.create-job"
              with:
                title: "{{get-req.job_title}}"
                description: "{{get-req.job_description}}"
                location: "{{get-req.location}}"
            - name: notify
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "recruiting"
                text: "Job posted: {{get-req.job_title}} in {{get-req.location}}. LinkedIn: {{post-job.job_id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: requisitions
          path: "/recruiting/v1/jobRequisitions/{{requisition_id}}"
          inputParameters:
            - name: requisition_id
              in: path
          operations:
            - name: get-requisition
              method: GET
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: jobs
          path: "/simpleJobPostings"
          operations:
            - name: create-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-message
              method: POST

Retrieves the status of a loan application from the lending platform, returning approval status, requested amount, interest rate, and decision date.

naftiko: "0.5"
info:
  label: "Loan Application Status Lookup"
  description: "Retrieves the status of a loan application from the lending platform, returning approval status, requested amount, interest rate, and decision date."
  tags:
    - lending
    - banking
    - temenos-transact
capability:
  exposes:
    - type: mcp
      namespace: lending
      port: 8080
      tools:
        - name: get-loan-status
          description: "Look up a loan application status by application ID."
          inputParameters:
            - name: application_id
              in: body
              type: string
              description: "The loan application ID."
          call: "temenos.get-loan-application"
          with:
            application_id: "{{application_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.body.applicationStatus"
            - name: requested_amount
              type: string
              mapping: "$.body.requestedAmount"
            - name: interest_rate
              type: string
              mapping: "$.body.interestRate"
            - name: decision_date
              type: string
              mapping: "$.body.decisionDate"
  consumes:
    - type: http
      namespace: temenos
      baseUri: "https://core-banking.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.temenos_token"
      resources:
        - name: loan-applications
          path: "/lending/applications/{{application_id}}"
          inputParameters:
            - name: application_id
              in: path
          operations:
            - name: get-loan-application
              method: GET

Retrieves transaction data from Mastercard's network for ING-issued cards.

naftiko: "0.5"
info:
  label: "Mastercard Transaction Data Retriever"
  description: "Retrieves transaction data from Mastercard's network for ING-issued cards."
  tags:
    - payments
    - banking
    - mastercard
capability:
  exposes:
    - type: mcp
      namespace: card-transactions
      port: 8080
      tools:
        - name: get-card-transactions
          description: "Retrieve recent transactions for an ING Mastercard."
          inputParameters:
            - name: card_id
              in: body
              type: string
              description: "Card identifier."
            - name: date_range
              in: body
              type: string
              description: "Date range."
          call: "mastercard.get-transactions"
          with:
            card_id: "{{card_id}}"
            date_range: "{{date_range}}"
          outputParameters:
            - name: transactions
              type: string
              mapping: "$.transactions"
            - name: total_count
              type: string
              mapping: "$.totalCount"
  consumes:
    - type: http
      namespace: mastercard
      baseUri: "https://api.mastercard.com/atms/v1"
      authentication:
        type: bearer
        token: "$secrets.mastercard_token"
      resources:
        - name: transactions
          path: "/cards/{{card_id}}/transactions"
          inputParameters:
            - name: card_id
              in: path
            - name: date_range
              in: query
          operations:
            - name: get-transactions
              method: GET

Retrieves user identity details from Microsoft Entra ID for ING access management, returning user principal name, group memberships, and last sign-in date.

naftiko: "0.5"
info:
  label: "Microsoft Entra Identity Lookup"
  description: "Retrieves user identity details from Microsoft Entra ID for ING access management, returning user principal name, group memberships, and last sign-in date."
  tags:
    - security
    - identity
    - microsoft-entra
capability:
  exposes:
    - type: mcp
      namespace: identity-management
      port: 8080
      tools:
        - name: get-user-identity
          description: "Look up a user identity in Microsoft Entra ID."
          inputParameters:
            - name: user_id
              in: body
              type: string
              description: "The Entra user principal name or ID."
          call: "entra.get-user"
          with:
            user_id: "{{user_id}}"
          outputParameters:
            - name: display_name
              type: string
              mapping: "$.displayName"
            - name: upn
              type: string
              mapping: "$.userPrincipalName"
            - name: groups
              type: string
              mapping: "$.memberOf"
            - name: last_sign_in
              type: string
              mapping: "$.signInActivity.lastSignInDateTime"
  consumes:
    - type: http
      namespace: entra
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.entra_token"
      resources:
        - name: users
          path: "/users/{{user_id}}"
          inputParameters:
            - name: user_id
              in: path
          operations:
            - name: get-user
              method: GET

Generates a regulatory Excel report with data from SAP financial systems.

naftiko: "0.5"
info:
  label: "Microsoft Excel Regulatory Report Builder"
  description: "Generates a regulatory Excel report with data from SAP financial systems."
  tags:
    - compliance
    - reporting
    - microsoft-excel
    - sap
capability:
  exposes:
    - type: mcp
      namespace: reg-reporting
      port: 8080
      tools:
        - name: build-report
          description: "Build a regulatory Excel report from SAP data."
          inputParameters:
            - name: report_type
              in: body
              type: string
              description: "Report type."
            - name: period
              in: body
              type: string
              description: "Reporting period."
          steps:
            - name: get-data
              type: call
              call: "sap.get-financial-data"
              with:
                report_type: "{{report_type}}"
                period: "{{period}}"
            - name: update-workbook
              type: call
              call: "excel.update-range"
              with:
                workbook_id: "reg_{{report_type}}"
                sheet_name: "Data"
                range: "A2:Z100"
                values: "{{get-data.results}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ing-s4.sap.com/sap/opu/odata/sap/API_FINANCIAL_REPORTING_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: reports
          path: "/A_FinancialReport"
          operations:
            - name: get-financial-data
              method: GET
    - type: http
      namespace: excel
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: workbooks
          path: "/me/drive/items/{{workbook_id}}/workbook/worksheets/{{sheet_name}}/range(address='{{range}}')"
          inputParameters:
            - name: workbook_id
              in: path
            - name: sheet_name
              in: path
            - name: range
              in: path
          operations:
            - name: update-range
              method: PATCH

Creates a meeting on an ING employee's Outlook calendar.

naftiko: "0.5"
info:
  label: "Microsoft Outlook Meeting Scheduler"
  description: "Creates a meeting on an ING employee's Outlook calendar."
  tags:
    - communications
    - scheduling
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: meeting-scheduler
      port: 8080
      tools:
        - name: schedule-meeting
          description: "Create a meeting on Outlook calendar."
          inputParameters:
            - name: organizer_upn
              in: body
              type: string
              description: "Organizer UPN."
            - name: subject
              in: body
              type: string
              description: "Subject."
            - name: start_time
              in: body
              type: string
              description: "Start time ISO 8601."
            - name: end_time
              in: body
              type: string
              description: "End time ISO 8601."
          call: "outlook.create-event"
          with:
            organizer_upn: "{{organizer_upn}}"
            subject: "{{subject}}"
            start_time: "{{start_time}}"
            end_time: "{{end_time}}"
          outputParameters:
            - name: meeting_link
              type: string
              mapping: "$.onlineMeeting.joinUrl"
  consumes:
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: events
          path: "/users/{{organizer_upn}}/events"
          inputParameters:
            - name: organizer_upn
              in: path
          operations:
            - name: create-event
              method: POST

Retrieves project plan status from Microsoft Planner for ING business initiatives, returning task count, completion percentage, and overdue task count.

naftiko: "0.5"
info:
  label: "Microsoft Planner Project Tracker"
  description: "Retrieves project plan status from Microsoft Planner for ING business initiatives, returning task count, completion percentage, and overdue task count."
  tags:
    - project-management
    - microsoft-planner
capability:
  exposes:
    - type: mcp
      namespace: project-tracking
      port: 8080
      tools:
        - name: get-plan-status
          description: "Retrieve project plan status from Microsoft Planner."
          inputParameters:
            - name: plan_id
              in: body
              type: string
              description: "The Microsoft Planner plan ID."
          call: "planner.get-plan"
          with:
            plan_id: "{{plan_id}}"
          outputParameters:
            - name: task_count
              type: number
              mapping: "$.tasks.length"
            - name: completion_pct
              type: string
              mapping: "$.percentComplete"
            - name: overdue_count
              type: number
              mapping: "$.overdueTasks"
  consumes:
    - type: http
      namespace: planner
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.microsoft_graph_token"
      resources:
        - name: plans
          path: "/planner/plans/{{plan_id}}/tasks"
          inputParameters:
            - name: plan_id
              in: path
          operations:
            - name: get-plan
              method: GET

Triggers a Power Automate flow for custom ING automations.

naftiko: "0.5"
info:
  label: "Microsoft Power Automate Flow Trigger"
  description: "Triggers a Power Automate flow for custom ING automations."
  tags:
    - automation
    - microsoft-power-automate
capability:
  exposes:
    - type: mcp
      namespace: flow-trigger
      port: 8080
      tools:
        - name: trigger-flow
          description: "Trigger a Power Automate flow."
          inputParameters:
            - name: flow_id
              in: body
              type: string
              description: "Flow ID."
            - name: payload
              in: body
              type: string
              description: "JSON payload."
          call: "power-automate.invoke-flow"
          with:
            flow_id: "{{flow_id}}"
            payload: "{{payload}}"
  consumes:
    - type: http
      namespace: power-automate
      baseUri: "https://prod-00.westus.logic.azure.com/workflows"
      authentication:
        type: bearer
        token: "$secrets.power_automate_token"
      resources:
        - name: flows
          path: "/{{flow_id}}/triggers/manual/paths/invoke"
          inputParameters:
            - name: flow_id
              in: path
          operations:
            - name: invoke-flow
              method: POST

Sends an announcement to an ING department's Teams channel.

naftiko: "0.5"
info:
  label: "Microsoft Teams Departmental Announcement"
  description: "Sends an announcement to an ING department's Teams channel."
  tags:
    - communications
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: dept-comms
      port: 8080
      tools:
        - name: send-announcement
          description: "Post an announcement to a department Teams channel."
          inputParameters:
            - name: department
              in: body
              type: string
              description: "Department name."
            - name: message
              in: body
              type: string
              description: "Message text."
          call: "msteams.post-message"
          with:
            channel_id: "announcements_{{department}}"
            text: "{{message}}"
  consumes:
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Orchestrates biometric enrollment for ING mobile banking customers, coordinating fingerprint and facial recognition setup with device binding and security validation.

naftiko: "0.5"
info:
  label: "Mobile Banking Biometric Enrollment Orchestrator"
  description: "Orchestrates biometric enrollment for ING mobile banking customers, coordinating fingerprint and facial recognition setup with device binding and security validation."
  tags:
    - mobile-banking
    - biometric-security
    - authentication
capability:
  exposes:
    - type: mcp
      namespace: biometric-enrollment
      port: 8080
      tools:
        - name: enroll-biometric
          description: "Enroll a customer biometric authentication method for mobile banking."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The ING customer identifier."
            - name: device_id
              in: body
              type: string
              description: "The registered mobile device identifier."
            - name: biometric_type
              in: body
              type: string
              description: "Biometric type such as fingerprint or face-recognition."
          call: "identity-api.enroll-biometric"
          with:
            customer: "{{customer_id}}"
            device: "{{device_id}}"
            type: "{{biometric_type}}"
          outputParameters:
            - name: enrollment_id
              type: string
              mapping: "$.enrollment.id"
            - name: status
              type: string
              mapping: "$.enrollment.status"
            - name: device_bound
              type: boolean
              mapping: "$.enrollment.deviceBound"
  consumes:
    - type: http
      namespace: identity-api
      baseUri: "https://api.ing.com/identity/v1"
      authentication:
        type: bearer
        token: "$secrets.ing_identity_api_token"
      resources:
        - name: biometrics
          path: "/customers/{{customer}}/biometrics"
          inputParameters:
            - name: customer
              in: path
          operations:
            - name: enroll-biometric
              method: POST

Retrieves credit ratings from Moody's for counterparty risk assessment.

naftiko: "0.5"
info:
  label: "Moody's Credit Rating Lookup"
  description: "Retrieves credit ratings from Moody's for counterparty risk assessment."
  tags:
    - risk
    - compliance
    - moodys
capability:
  exposes:
    - type: mcp
      namespace: credit-ratings
      port: 8080
      tools:
        - name: get-credit-rating
          description: "Look up a counterparty credit rating from Moody's."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Moody's entity ID."
          call: "moodys.get-rating"
          with:
            entity_id: "{{entity_id}}"
          outputParameters:
            - name: rating
              type: string
              mapping: "$.rating"
            - name: outlook
              type: string
              mapping: "$.outlook"
  consumes:
    - type: http
      namespace: moodys
      baseUri: "https://api.moodys.com/v1"
      authentication:
        type: bearer
        token: "$secrets.moodys_token"
      resources:
        - name: ratings
          path: "/entities/{{entity_id}}/ratings"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-rating
              method: GET

Retrieves credit rating information from Moody's for a counterparty, returning the current rating, outlook, and last review date.

naftiko: "0.5"
info:
  label: "Moody's Credit Rating Lookup"
  description: "Retrieves credit rating information from Moody's for a counterparty, returning the current rating, outlook, and last review date."
  tags:
    - risk
    - credit
    - moodys
capability:
  exposes:
    - type: mcp
      namespace: credit-ratings
      port: 8080
      tools:
        - name: get-rating
          description: "Look up a Moody's credit rating for a counterparty."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The Moody's entity identifier."
          call: "moodys.get-rating"
          with:
            entity_id: "{{entity_id}}"
          outputParameters:
            - name: rating
              type: string
              mapping: "$.rating.currentRating"
            - name: outlook
              type: string
              mapping: "$.rating.outlook"
            - name: last_review
              type: string
              mapping: "$.rating.lastReviewDate"
  consumes:
    - type: http
      namespace: moodys
      baseUri: "https://api.moodys.com/v1"
      authentication:
        type: bearer
        token: "$secrets.moodys_api_key"
      resources:
        - name: ratings
          path: "/entities/{{entity_id}}/ratings"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-rating
              method: GET

When a mortgage application is submitted, runs credit checks, creates a case in the lending system, and notifies the mortgage advisor via Teams.

naftiko: "0.5"
info:
  label: "Mortgage Application Pipeline"
  description: "When a mortgage application is submitted, runs credit checks, creates a case in the lending system, and notifies the mortgage advisor via Teams."
  tags:
    - lending
    - banking
    - temenos-transact
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: mortgage-applications
      port: 8080
      tools:
        - name: process-mortgage
          description: "Orchestrate a mortgage application through credit check and advisor notification."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "Customer ID."
            - name: property_value
              in: body
              type: string
              description: "Property value in EUR."
            - name: loan_amount
              in: body
              type: string
              description: "Requested mortgage amount in EUR."
            - name: term_years
              in: body
              type: string
              description: "Mortgage term in years."
          steps:
            - name: run-credit-check
              type: call
              call: "risk-engine.get-score"
              with:
                customer_id: "{{customer_id}}"
            - name: create-application
              type: call
              call: "temenos.create-mortgage-app"
              with:
                customer_id: "{{customer_id}}"
                property_value: "{{property_value}}"
                loan_amount: "{{loan_amount}}"
                term_years: "{{term_years}}"
                risk_rating: "{{run-credit-check.risk_rating}}"
            - name: notify-advisor
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "mortgage_advisors"
                text: "New mortgage application: Customer {{customer_id}}. Amount: EUR {{loan_amount}}. Property: EUR {{property_value}}. Risk: {{run-credit-check.risk_rating}}. Ref: {{create-application.application_id}}"
  consumes:
    - type: http
      namespace: risk-engine
      baseUri: "https://risk-engine.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.risk_engine_token"
      resources:
        - name: scores
          path: "/credit/scores/{{customer_id}}"
          inputParameters:
            - name: customer_id
              in: path
          operations:
            - name: get-score
              method: GET
    - type: http
      namespace: temenos
      baseUri: "https://core-banking.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.temenos_token"
      resources:
        - name: mortgages
          path: "/lending/mortgages/applications"
          operations:
            - name: create-mortgage-app
              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-message
              method: POST

Orchestrates mortgage renewal by retrieving the existing mortgage from Temenos, calculating new rates via the pricing engine, generating the renewal offer, and sending it via WhatsApp.

naftiko: "0.5"
info:
  label: "Mortgage Renewal Orchestrator"
  description: "Orchestrates mortgage renewal by retrieving the existing mortgage from Temenos, calculating new rates via the pricing engine, generating the renewal offer, and sending it via WhatsApp."
  tags:
    - lending
    - mortgage
    - temenos-transact
    - whatsapp
capability:
  exposes:
    - type: mcp
      namespace: mortgage-renewal
      port: 8080
      tools:
        - name: process-renewal
          description: "Process a mortgage renewal for an ING customer."
          inputParameters:
            - name: mortgage_id
              in: body
              type: string
              description: "The mortgage account ID."
            - name: customer_id
              in: body
              type: string
              description: "The customer ID."
          steps:
            - name: get-mortgage
              type: call
              call: "temenos.get-mortgage"
              with:
                mortgage_id: "{{mortgage_id}}"
            - name: calculate-rate
              type: call
              call: "pricing-engine.calculate-rate"
              with:
                loan_amount: "{{get-mortgage.outstanding_balance}}"
                ltv: "{{get-mortgage.current_ltv}}"
                term_remaining: "{{get-mortgage.remaining_term}}"
            - name: generate-offer
              type: call
              call: "temenos.create-renewal-offer"
              with:
                mortgage_id: "{{mortgage_id}}"
                new_rate: "{{calculate-rate.offered_rate}}"
                term: "{{calculate-rate.recommended_term}}"
            - name: notify-customer
              type: call
              call: "whatsapp.send-message"
              with:
                phone: "{{get-mortgage.customer_phone}}"
                template: "mortgage_renewal_offer"
                parameters: "{{calculate-rate.offered_rate}},{{generate-offer.monthly_payment}},{{generate-offer.offer_expiry}}"
  consumes:
    - type: http
      namespace: temenos
      baseUri: "https://core-banking.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.temenos_token"
      resources:
        - name: mortgages
          path: "/mortgages/{{mortgage_id}}"
          inputParameters:
            - name: mortgage_id
              in: path
          operations:
            - name: get-mortgage
              method: GET
        - name: renewal-offers
          path: "/mortgages/{{mortgage_id}}/renewal"
          inputParameters:
            - name: mortgage_id
              in: path
          operations:
            - name: create-renewal-offer
              method: POST
    - type: http
      namespace: pricing-engine
      baseUri: "https://pricing.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pricing_engine_token"
      resources:
        - name: rates
          path: "/mortgage/calculate"
          operations:
            - name: calculate-rate
              method: POST
    - type: http
      namespace: whatsapp
      baseUri: "https://graph.facebook.com/v17.0"
      authentication:
        type: bearer
        token: "$secrets.whatsapp_token"
      resources:
        - name: messages
          path: "/{{phone_number_id}}/messages"
          inputParameters:
            - name: phone_number_id
              in: path
          operations:
            - name: send-message
              method: POST

Checks API gateway health in MuleSoft Anypoint Platform, returning API status, response time, error rate, and active policy count.

naftiko: "0.5"
info:
  label: "MuleSoft API Gateway Health Check"
  description: "Checks API gateway health in MuleSoft Anypoint Platform, returning API status, response time, error rate, and active policy count."
  tags:
    - integration
    - mulesoft
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: api-gateway
      port: 8080
      tools:
        - name: check-api-health
          description: "Check MuleSoft API gateway health."
          inputParameters:
            - name: api_id
              in: body
              type: string
              description: "The MuleSoft API ID."
          call: "mulesoft.get-api-status"
          with:
            api_id: "{{api_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: avg_response_time
              type: string
              mapping: "$.metrics.avgResponseTime"
            - name: error_rate
              type: string
              mapping: "$.metrics.errorRate"
  consumes:
    - type: http
      namespace: mulesoft
      baseUri: "https://anypoint.mulesoft.com/apimanager/api/v1"
      authentication:
        type: bearer
        token: "$secrets.mulesoft_token"
      resources:
        - name: apis
          path: "/organizations/{{org_id}}/environments/{{env_id}}/apis/{{api_id}}"
          inputParameters:
            - name: api_id
              in: path
          operations:
            - name: get-api-status
              method: GET

Checks the status of a MuleSoft API integration for ING's middleware layer.

naftiko: "0.5"
info:
  label: "MuleSoft API Integration Status"
  description: "Checks the status of a MuleSoft API integration for ING's middleware layer."
  tags:
    - it-operations
    - integrations
    - mulesoft
capability:
  exposes:
    - type: mcp
      namespace: integration-status
      port: 8080
      tools:
        - name: get-api-status
          description: "Check MuleSoft API integration status."
          inputParameters:
            - name: api_id
              in: body
              type: string
              description: "MuleSoft API ID."
          call: "mulesoft.get-api-status"
          with:
            api_id: "{{api_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: uptime
              type: string
              mapping: "$.uptime"
  consumes:
    - type: http
      namespace: mulesoft
      baseUri: "https://anypoint.mulesoft.com/apimanager/api/v1"
      authentication:
        type: bearer
        token: "$secrets.mulesoft_token"
      resources:
        - name: apis
          path: "/organizations/{{org_id}}/environments/{{env_id}}/apis/{{api_id}}"
          inputParameters:
            - name: api_id
              in: path
          operations:
            - name: get-api-status
              method: GET

Retrieves a derivatives trading position from Murex by trade ID, returning notional amount, mark-to-market value, counterparty, and maturity date.

naftiko: "0.5"
info:
  label: "Murex Derivatives Position Lookup"
  description: "Retrieves a derivatives trading position from Murex by trade ID, returning notional amount, mark-to-market value, counterparty, and maturity date."
  tags:
    - trading
    - derivatives
    - murex
capability:
  exposes:
    - type: mcp
      namespace: derivatives-positions
      port: 8080
      tools:
        - name: get-position
          description: "Look up a derivatives position in Murex."
          inputParameters:
            - name: trade_id
              in: body
              type: string
              description: "The Murex trade ID."
          call: "murex.get-trade"
          with:
            trade_id: "{{trade_id}}"
          outputParameters:
            - name: notional
              type: string
              mapping: "$.trade.notionalAmount"
            - name: mtm_value
              type: string
              mapping: "$.trade.markToMarket"
            - name: counterparty
              type: string
              mapping: "$.trade.counterpartyName"
            - name: maturity
              type: string
              mapping: "$.trade.maturityDate"
  consumes:
    - type: http
      namespace: murex
      baseUri: "https://murex.ing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.murex_token"
      resources:
        - name: trades
          path: "/trades/{{trade_id}}"
          inputParameters:
            - name: trade_id
              in: path
          operations:
            - name: get-trade
              method: GET

Retrieves trade details from the Murex trading platform, returning trade type, notional, counterparty, and maturity date.

naftiko: "0.5"
info:
  label: "Murex Trade Booking Lookup"
  description: "Retrieves trade details from the Murex trading platform, returning trade type, notional, counterparty, and maturity date."
  tags:
    - banking
    - trading
    - murex
capability:
  exposes:
    - type: mcp
      namespace: trade-management
      port: 8080
      tools:
        - name: get-trade
          description: "Look up a trade in Murex by trade ID."
          inputParameters:
            - name: trade_id
              in: body
              type: string
              description: "Murex trade ID."
          call: "murex.get-trade"
          with:
            trade_id: "{{trade_id}}"
          outputParameters:
            - name: trade_type
              type: string
              mapping: "$.tradeType"
            - name: notional
              type: string
              mapping: "$.notionalAmount"
            - name: counterparty
              type: string
              mapping: "$.counterpartyName"
            - name: maturity_date
              type: string
              mapping: "$.maturityDate"
  consumes:
    - type: http
      namespace: murex
      baseUri: "https://murex.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.murex_token"
      resources:
        - name: trades
          path: "/trades/{{trade_id}}"
          inputParameters:
            - name: trade_id
              in: path
          operations:
            - name: get-trade
              method: GET

Retrieves application performance from New Relic for ING's online banking platform.

naftiko: "0.5"
info:
  label: "New Relic Banking Platform Monitor"
  description: "Retrieves application performance from New Relic for ING's online banking platform."
  tags:
    - it-operations
    - monitoring
    - new-relic
capability:
  exposes:
    - type: mcp
      namespace: app-performance
      port: 8080
      tools:
        - name: get-app-metrics
          description: "Get app performance from New Relic."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "New Relic app ID."
          call: "newrelic.get-app"
          with:
            app_id: "{{app_id}}"
          outputParameters:
            - name: response_time
              type: string
              mapping: "$.application.application_summary.response_time"
            - name: error_rate
              type: string
              mapping: "$.application.application_summary.error_rate"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: apiKey
        name: "Api-Key"
        in: header
        value: "$secrets.newrelic_api_key"
      resources:
        - name: applications
          path: "/applications/{{app_id}}.json"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: get-app
              method: GET

Queries Oracle Enterprise Manager for database performance metrics, returning active sessions, wait events, tablespace utilization, and SQL execution statistics.

naftiko: "0.5"
info:
  label: "Oracle Database Performance Monitor"
  description: "Queries Oracle Enterprise Manager for database performance metrics, returning active sessions, wait events, tablespace utilization, and SQL execution statistics."
  tags:
    - infrastructure
    - oracle-enterprise-manager
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: db-performance
      port: 8080
      tools:
        - name: get-db-metrics
          description: "Retrieve Oracle database performance metrics."
          inputParameters:
            - name: database_id
              in: body
              type: string
              description: "The Oracle database identifier."
          call: "oem.get-metrics"
          with:
            database_id: "{{database_id}}"
          outputParameters:
            - name: active_sessions
              type: number
              mapping: "$.metrics.activeSessions"
            - name: top_wait_event
              type: string
              mapping: "$.metrics.topWaitEvent"
            - name: tablespace_pct
              type: string
              mapping: "$.metrics.tablespaceUtilization"
  consumes:
    - type: http
      namespace: oem
      baseUri: "https://oem.ing.com/em/websvcs/restful/emws/db/v1"
      authentication:
        type: basic
        username: "$secrets.oem_user"
        password: "$secrets.oem_password"
      resources:
        - name: databases
          path: "/databases/{{database_id}}/metrics"
          inputParameters:
            - name: database_id
              in: path
          operations:
            - name: get-metrics
              method: GET

Processes a payment transfer by validating the sender account, running compliance screening via the sanctions system, executing the payment in the core banking platform, and sending confirmation via WhatsApp.

naftiko: "0.5"
info:
  label: "Payment Transfer Orchestrator"
  description: "Processes a payment transfer by validating the sender account, running compliance screening via the sanctions system, executing the payment in the core banking platform, and sending confirmation via WhatsApp."
  tags:
    - payments
    - banking
    - compliance
    - temenos-transact
    - whatsapp
capability:
  exposes:
    - type: mcp
      namespace: payment-transfers
      port: 8080
      tools:
        - name: process-transfer
          description: "Orchestrate a payment transfer with compliance checks and notification."
          inputParameters:
            - name: sender_account
              in: body
              type: string
              description: "Sender account number."
            - name: recipient_account
              in: body
              type: string
              description: "Recipient account number."
            - name: amount
              in: body
              type: string
              description: "Transfer amount."
            - name: currency
              in: body
              type: string
              description: "Currency code (EUR, USD)."
          steps:
            - name: validate-sender
              type: call
              call: "temenos.get-account"
              with:
                account_id: "{{sender_account}}"
            - name: screen-sanctions
              type: call
              call: "compliance.screen-payment"
              with:
                sender: "{{sender_account}}"
                recipient: "{{recipient_account}}"
                amount: "{{amount}}"
                currency: "{{currency}}"
            - name: execute-payment
              type: call
              call: "temenos.create-payment"
              with:
                debit_account: "{{sender_account}}"
                credit_account: "{{recipient_account}}"
                amount: "{{amount}}"
                currency: "{{currency}}"
            - name: send-confirmation
              type: call
              call: "whatsapp.send-message"
              with:
                phone: "{{validate-sender.phone_number}}"
                template: "payment_confirmed"
                parameters: "{{amount}} {{currency}},{{recipient_account}},{{execute-payment.reference}}"
  consumes:
    - type: http
      namespace: temenos
      baseUri: "https://core-banking.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.temenos_token"
      resources:
        - name: accounts
          path: "/accounts/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET
        - name: payments
          path: "/payments/transfer"
          operations:
            - name: create-payment
              method: POST
    - type: http
      namespace: compliance
      baseUri: "https://compliance-screening.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.compliance_token"
      resources:
        - name: screening
          path: "/sanctions/screen"
          operations:
            - name: screen-payment
              method: POST
    - type: http
      namespace: whatsapp
      baseUri: "https://graph.facebook.com/v17.0"
      authentication:
        type: bearer
        token: "$secrets.whatsapp_token"
      resources:
        - name: messages
          path: "/{{phone_number_id}}/messages"
          inputParameters:
            - name: phone_number_id
              in: path
          operations:
            - name: send-message
              method: POST

Assigns a Pluralsight learning path to an ING employee and notifies via Teams.

naftiko: "0.5"
info:
  label: "Pluralsight Training Assigner"
  description: "Assigns a Pluralsight learning path to an ING employee and notifies via Teams."
  tags:
    - hr
    - training
    - pluralsight
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: training
      port: 8080
      tools:
        - name: assign-training
          description: "Assign training and notify."
          inputParameters:
            - name: employee_email
              in: body
              type: string
              description: "Employee email."
            - name: channel_id
              in: body
              type: string
              description: "Pluralsight channel ID."
          steps:
            - name: assign
              type: call
              call: "pluralsight.assign-channel"
              with:
                email: "{{employee_email}}"
                channel_id: "{{channel_id}}"
            - name: notify
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{employee_email}}"
                text: "New training assigned: {{assign.channel_url}}"
  consumes:
    - type: http
      namespace: pluralsight
      baseUri: "https://api.pluralsight.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pluralsight_token"
      resources:
        - name: channels
          path: "/channels/{{channel_id}}/assignments"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: assign-channel
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves regulatory compliance dashboard data from Power BI, returning capital adequacy ratio, liquidity coverage ratio, and leverage ratio for ING Group reporting.

naftiko: "0.5"
info:
  label: "Power BI Regulatory Dashboard"
  description: "Retrieves regulatory compliance dashboard data from Power BI, returning capital adequacy ratio, liquidity coverage ratio, and leverage ratio for ING Group reporting."
  tags:
    - compliance
    - analytics
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: regulatory-dashboard
      port: 8080
      tools:
        - name: get-regulatory-metrics
          description: "Retrieve regulatory compliance metrics from Power BI."
          inputParameters:
            - name: report_date
              in: body
              type: string
              description: "The reporting date."
          call: "powerbi.query-regulatory"
          with:
            report_date: "{{report_date}}"
          outputParameters:
            - name: car
              type: string
              mapping: "$.value[0].CapitalAdequacyRatio"
            - name: lcr
              type: string
              mapping: "$.value[0].LiquidityCoverageRatio"
            - name: leverage_ratio
              type: string
              mapping: "$.value[0].LeverageRatio"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/executeQueries"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: query-regulatory
              method: POST

Manages PSD2 open banking consent flows for third-party account access, handling consent creation, status tracking, and revocation across ING retail accounts.

naftiko: "0.5"
info:
  label: "PSD2 Account Access Consent Manager"
  description: "Manages PSD2 open banking consent flows for third-party account access, handling consent creation, status tracking, and revocation across ING retail accounts."
  tags:
    - open-banking
    - psd2
    - consent-management
capability:
  exposes:
    - type: mcp
      namespace: psd2-consent
      port: 8080
      tools:
        - name: manage-account-consent
          description: "Create or revoke a PSD2 account access consent."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The ING customer identifier."
            - name: tpp_id
              in: body
              type: string
              description: "The third-party provider identifier."
            - name: action
              in: body
              type: string
              description: "Action to perform such as create or revoke."
          call: "open-banking-api.manage-consent"
          with:
            customer: "{{customer_id}}"
            tpp: "{{tpp_id}}"
            action: "{{action}}"
          outputParameters:
            - name: consent_id
              type: string
              mapping: "$.consent.consentId"
            - name: status
              type: string
              mapping: "$.consent.status"
            - name: valid_until
              type: string
              mapping: "$.consent.validUntil"
  consumes:
    - type: http
      namespace: open-banking-api
      baseUri: "https://api.ing.com/open-banking/v1"
      authentication:
        type: bearer
        token: "$secrets.ing_open_banking_token"
      resources:
        - name: consents
          path: "/consents"
          operations:
            - name: manage-consent
              method: POST

Retrieves interbank reference rates (EURIBOR, EONIA, SOFR) from the market data service, returning rate value, tenor, fixing date, and source.

naftiko: "0.5"
info:
  label: "Interbank Reference Rate Lookup"
  description: "Retrieves interbank reference rates (EURIBOR, EONIA, SOFR) from the market data service, returning rate value, tenor, fixing date, and source."
  tags:
    - treasury
    - market-data
    - rates
capability:
  exposes:
    - type: mcp
      namespace: reference-rates
      port: 8080
      tools:
        - name: get-reference-rate
          description: "Look up an interbank reference rate."
          inputParameters:
            - name: rate_type
              in: body
              type: string
              description: "The rate type (EURIBOR, SOFR, EONIA)."
            - name: tenor
              in: body
              type: string
              description: "The tenor (1M, 3M, 6M, 12M)."
          call: "market-data.get-rate"
          with:
            rate_type: "{{rate_type}}"
            tenor: "{{tenor}}"
          outputParameters:
            - name: rate_value
              type: string
              mapping: "$.data.rate"
            - name: fixing_date
              type: string
              mapping: "$.data.fixingDate"
            - name: source
              type: string
              mapping: "$.data.source"
  consumes:
    - type: http
      namespace: market-data
      baseUri: "https://market-data.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.market_data_token"
      resources:
        - name: rates
          path: "/reference-rates?type={{rate_type}}&tenor={{tenor}}"
          inputParameters:
            - name: rate_type
              in: query
            - name: tenor
              in: query
          operations:
            - name: get-rate
              method: GET

Retrieves OpenShift cluster health for ING microservices platform, returning node readiness count, pod status summary, and cluster version.

naftiko: "0.5"
info:
  label: "Red Hat OpenShift Cluster Status"
  description: "Retrieves OpenShift cluster health for ING microservices platform, returning node readiness count, pod status summary, and cluster version."
  tags:
    - infrastructure
    - openshift
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: openshift-health
      port: 8080
      tools:
        - name: get-cluster-status
          description: "Retrieve OpenShift cluster health status."
          inputParameters:
            - name: cluster_name
              in: body
              type: string
              description: "The OpenShift cluster name."
          call: "openshift.get-cluster"
          with:
            cluster_name: "{{cluster_name}}"
          outputParameters:
            - name: ready_nodes
              type: number
              mapping: "$.status.readyNodes"
            - name: pod_summary
              type: string
              mapping: "$.status.podSummary"
            - name: version
              type: string
              mapping: "$.status.version"
  consumes:
    - type: http
      namespace: openshift
      baseUri: "https://api.openshift.ing.com:6443"
      authentication:
        type: bearer
        token: "$secrets.openshift_token"
      resources:
        - name: clusters
          path: "/apis/config.openshift.io/v1/clusterversions"
          operations:
            - name: get-cluster
              method: GET

Pulls financial data from SAP and generates a regulatory compliance report, storing it in SharePoint and notifying the compliance team.

naftiko: "0.5"
info:
  label: "Regulatory Report Generator"
  description: "Pulls financial data from SAP and generates a regulatory compliance report, storing it in SharePoint and notifying the compliance team."
  tags:
    - compliance
    - reporting
    - sap
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: regulatory-reporting
      port: 8080
      tools:
        - name: generate-report
          description: "Generate a regulatory report from SAP data and store in SharePoint."
          inputParameters:
            - name: report_type
              in: body
              type: string
              description: "Report type (e.g., COREP, FINREP, LCR)."
            - name: reporting_period
              in: body
              type: string
              description: "Reporting period YYYY-QN."
          steps:
            - name: get-financial-data
              type: call
              call: "sap.get-financial-report"
              with:
                report_type: "{{report_type}}"
                period: "{{reporting_period}}"
            - name: store-report
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "regulatory_reports"
                folder_path: "{{report_type}}/{{reporting_period}}"
                content: "{{get-financial-data.report_data}}"
            - name: notify-compliance
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "regulatory_compliance"
                text: "{{report_type}} report for {{reporting_period}} generated and stored. URL: {{store-report.download_url}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ing-s4.sap.com/sap/opu/odata/sap/API_FINANCIAL_REPORTING_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: reports
          path: "/A_FinancialReport"
          inputParameters:
            - name: $filter
              in: query
              value: "ReportType eq '{{report_type}}' and Period eq '{{period}}'"
          operations:
            - name: get-financial-report
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: uploads
          path: "/{{site_id}}/drive/root:/{{folder_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Orchestrates regulatory report submission by extracting data from Snowflake, validating against rules in the compliance engine, generating the XBRL report, and filing with the regulator via the submission gateway.

naftiko: "0.5"
info:
  label: "Regulatory Reporting Submission Orchestrator"
  description: "Orchestrates regulatory report submission by extracting data from Snowflake, validating against rules in the compliance engine, generating the XBRL report, and filing with the regulator via the submission gateway."
  tags:
    - compliance
    - regulatory
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: regulatory-reporting
      port: 8080
      tools:
        - name: submit-regulatory-report
          description: "Orchestrate regulatory report generation and submission."
          inputParameters:
            - name: report_type
              in: body
              type: string
              description: "The report type (COREP, FINREP, LCR)."
            - name: reporting_date
              in: body
              type: string
              description: "The reporting reference date."
          steps:
            - name: extract-data
              type: call
              call: "snowflake.query-regulatory-data"
              with:
                report_type: "{{report_type}}"
                date: "{{reporting_date}}"
            - name: validate-report
              type: call
              call: "compliance-engine.validate-report"
              with:
                report_type: "{{report_type}}"
                data_hash: "{{extract-data.data_hash}}"
            - name: generate-xbrl
              type: call
              call: "reporting-engine.generate-xbrl"
              with:
                report_type: "{{report_type}}"
                data_id: "{{extract-data.data_id}}"
                validation_id: "{{validate-report.validation_id}}"
            - name: file-with-regulator
              type: call
              call: "submission-gateway.submit"
              with:
                report_type: "{{report_type}}"
                xbrl_id: "{{generate-xbrl.xbrl_document_id}}"
                reporting_date: "{{reporting_date}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://ing.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query-regulatory-data
              method: POST
    - type: http
      namespace: compliance-engine
      baseUri: "https://compliance-engine.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.compliance_engine_token"
      resources:
        - name: validation
          path: "/reports/validate"
          operations:
            - name: validate-report
              method: POST
    - type: http
      namespace: reporting-engine
      baseUri: "https://regulatory-reporting.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.reporting_engine_token"
      resources:
        - name: xbrl
          path: "/generate/xbrl"
          operations:
            - name: generate-xbrl
              method: POST
    - type: http
      namespace: submission-gateway
      baseUri: "https://submission-gateway.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.submission_gateway_token"
      resources:
        - name: submissions
          path: "/submit"
          operations:
            - name: submit
              method: POST

Retrieves a customer's 360 view from Salesforce, including account summary, recent interactions, and open cases.

naftiko: "0.5"
info:
  label: "Salesforce Customer 360 Lookup"
  description: "Retrieves a customer's 360 view from Salesforce, including account summary, recent interactions, and open cases."
  tags:
    - banking
    - customer-service
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: customer-360
      port: 8080
      tools:
        - name: get-customer-view
          description: "Retrieve customer 360 view from Salesforce."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "Customer ID."
          call: "salesforce.get-contact"
          with:
            customer_id: "{{customer_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.Name"
            - name: segment
              type: string
              mapping: "$.Customer_Segment__c"
            - name: relationship_manager
              type: string
              mapping: "$.Relationship_Manager__c"
            - name: open_cases
              type: string
              mapping: "$.Cases.totalSize"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://ing.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact/{{customer_id}}"
          inputParameters:
            - name: customer_id
              in: path
          operations:
            - name: get-contact
              method: GET

Retrieves billing account details from SAP BRIM for ING fee management, returning account status, outstanding charges, billing cycle, and payment method.

naftiko: "0.5"
info:
  label: "SAP BRIM Billing Account Lookup"
  description: "Retrieves billing account details from SAP BRIM for ING fee management, returning account status, outstanding charges, billing cycle, and payment method."
  tags:
    - billing
    - sap-brim
    - banking
capability:
  exposes:
    - type: mcp
      namespace: billing-management
      port: 8080
      tools:
        - name: get-billing-account
          description: "Look up a billing account in SAP BRIM."
          inputParameters:
            - name: billing_account_id
              in: body
              type: string
              description: "The SAP BRIM billing account ID."
          call: "sapbrim.get-account"
          with:
            billing_account_id: "{{billing_account_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.billingAccount.status"
            - name: outstanding_charges
              type: string
              mapping: "$.billingAccount.outstandingAmount"
            - name: billing_cycle
              type: string
              mapping: "$.billingAccount.billingCycle"
  consumes:
    - type: http
      namespace: sapbrim
      baseUri: "https://ing-brim.sap.com/api/v1"
      authentication:
        type: basic
        username: "$secrets.sap_brim_user"
        password: "$secrets.sap_brim_password"
      resources:
        - name: accounts
          path: "/billing-accounts/{{billing_account_id}}"
          inputParameters:
            - name: billing_account_id
              in: path
          operations:
            - name: get-account
              method: GET

Retrieves general ledger account balances from SAP for ING financial reporting, returning debit total, credit total, and net balance for a given period.

naftiko: "0.5"
info:
  label: "SAP General Ledger Balance Lookup"
  description: "Retrieves general ledger account balances from SAP for ING financial reporting, returning debit total, credit total, and net balance for a given period."
  tags:
    - finance
    - sap
    - accounting
capability:
  exposes:
    - type: mcp
      namespace: general-ledger
      port: 8080
      tools:
        - name: get-gl-balance
          description: "Look up a general ledger account balance in SAP."
          inputParameters:
            - name: gl_account
              in: body
              type: string
              description: "The GL account number."
            - name: fiscal_period
              in: body
              type: string
              description: "The fiscal period."
          call: "sap.get-gl-balance"
          with:
            gl_account: "{{gl_account}}"
            fiscal_period: "{{fiscal_period}}"
          outputParameters:
            - name: debit_total
              type: string
              mapping: "$.d.DebitAmount"
            - name: credit_total
              type: string
              mapping: "$.d.CreditAmount"
            - name: net_balance
              type: string
              mapping: "$.d.NetBalance"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ing-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRYITEMBASIC_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: gl-accounts
          path: "/A_GLAccountBalance(GLAccount='{{gl_account}}',FiscalPeriod='{{fiscal_period}}')"
          inputParameters:
            - name: gl_account
              in: path
            - name: fiscal_period
              in: path
          operations:
            - name: get-gl-balance
              method: GET

Creates a general ledger journal entry in SAP for financial accounting.

naftiko: "0.5"
info:
  label: "SAP General Ledger Entry Creator"
  description: "Creates a general ledger journal entry in SAP for financial accounting."
  tags:
    - finance
    - accounting
    - sap
capability:
  exposes:
    - type: mcp
      namespace: finance-gl
      port: 8080
      tools:
        - name: create-journal-entry
          description: "Create a GL journal entry in SAP."
          inputParameters:
            - name: company_code
              in: body
              type: string
              description: "SAP company code."
            - name: posting_date
              in: body
              type: string
              description: "Posting date YYYY-MM-DD."
            - name: line_items
              in: body
              type: string
              description: "JSON array of line items."
          call: "sap.create-journal"
          with:
            company_code: "{{company_code}}"
            posting_date: "{{posting_date}}"
            line_items: "{{line_items}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ing-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRYITEMBASIC_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: journal-entries
          path: "/A_JournalEntryHeader"
          operations:
            - name: create-journal
              method: POST

Retrieves a SAP purchase order for ING procurement.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Lookup"
  description: "Retrieves a SAP purchase order for ING procurement."
  tags:
    - procurement
    - finance
    - sap
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Look up a SAP purchase order."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "SAP PO number."
          call: "sap.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: vendor
              type: string
              mapping: "$.d.Supplier.CompanyName"
            - name: total_amount
              type: string
              mapping: "$.d.TotalAmount"
            - name: status
              type: string
              mapping: "$.d.OverallStatus"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://ing-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{po_number}}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET

Tracks savings goal progress for ING retail customers, calculating projected completion dates and suggesting automatic transfer adjustments to meet targets.

naftiko: "0.5"
info:
  label: "Savings Goal Progress Tracker"
  description: "Tracks savings goal progress for ING retail customers, calculating projected completion dates and suggesting automatic transfer adjustments to meet targets."
  tags:
    - retail-banking
    - savings
    - personal-finance
capability:
  exposes:
    - type: mcp
      namespace: savings-goals
      port: 8080
      tools:
        - name: get-savings-goal-progress
          description: "Retrieve savings goal progress and projected completion date."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The ING customer identifier."
            - name: goal_id
              in: body
              type: string
              description: "The savings goal identifier."
          call: "savings-api.get-goal-progress"
          with:
            customer: "{{customer_id}}"
            goal: "{{goal_id}}"
          outputParameters:
            - name: current_balance
              type: number
              mapping: "$.goal.currentBalance"
            - name: target_amount
              type: number
              mapping: "$.goal.targetAmount"
            - name: projected_completion_date
              type: string
              mapping: "$.goal.projectedCompletionDate"
  consumes:
    - type: http
      namespace: savings-api
      baseUri: "https://api.ing.com/retail/v1"
      authentication:
        type: bearer
        token: "$secrets.ing_retail_api_token"
      resources:
        - name: goals
          path: "/customers/{{customer}}/savings-goals/{{goal}}"
          inputParameters:
            - name: customer
              in: path
            - name: goal
              in: path
          operations:
            - name: get-goal-progress
              method: GET

Processes a SEPA batch payment file by validating the file format, screening all payments against sanctions, executing the batch in Temenos, and sending settlement confirmation via the corporate portal.

naftiko: "0.5"
info:
  label: "SEPA Batch Payment Processing Pipeline"
  description: "Processes a SEPA batch payment file by validating the file format, screening all payments against sanctions, executing the batch in Temenos, and sending settlement confirmation via the corporate portal."
  tags:
    - payments
    - sepa
    - temenos-transact
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: sepa-batch
      port: 8080
      tools:
        - name: process-batch
          description: "Process a SEPA batch payment file."
          inputParameters:
            - name: batch_id
              in: body
              type: string
              description: "The batch file identifier."
            - name: corporate_id
              in: body
              type: string
              description: "The corporate client ID."
          steps:
            - name: validate-file
              type: call
              call: "payment-hub.validate-batch"
              with:
                batch_id: "{{batch_id}}"
            - name: screen-sanctions
              type: call
              call: "compliance.screen-batch"
              with:
                batch_id: "{{batch_id}}"
                payment_count: "{{validate-file.payment_count}}"
            - name: execute-batch
              type: call
              call: "temenos.execute-batch-payment"
              with:
                batch_id: "{{batch_id}}"
                corporate_id: "{{corporate_id}}"
            - name: confirm-settlement
              type: call
              call: "corporate-portal.send-confirmation"
              with:
                corporate_id: "{{corporate_id}}"
                batch_id: "{{batch_id}}"
                total_amount: "{{execute-batch.total_amount}}"
                payment_count: "{{validate-file.payment_count}}"
  consumes:
    - type: http
      namespace: payment-hub
      baseUri: "https://payment-hub.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.payment_hub_token"
      resources:
        - name: batches
          path: "/batches/validate"
          operations:
            - name: validate-batch
              method: POST
    - type: http
      namespace: compliance
      baseUri: "https://compliance-screening.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.compliance_token"
      resources:
        - name: batch-screening
          path: "/sanctions/screen-batch"
          operations:
            - name: screen-batch
              method: POST
    - type: http
      namespace: temenos
      baseUri: "https://core-banking.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.temenos_token"
      resources:
        - name: batch-payments
          path: "/payments/batch/execute"
          operations:
            - name: execute-batch-payment
              method: POST
    - type: http
      namespace: corporate-portal
      baseUri: "https://corporate.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.corporate_portal_token"
      resources:
        - name: confirmations
          path: "/confirmations/send"
          operations:
            - name: send-confirmation
              method: POST

Retrieves SEPA direct debit mandate details for a customer account, returning mandate reference, creditor, status, and maximum amount.

naftiko: "0.5"
info:
  label: "SEPA Direct Debit Mandate Lookup"
  description: "Retrieves SEPA direct debit mandate details for a customer account, returning mandate reference, creditor, status, and maximum amount."
  tags:
    - payments
    - banking
    - temenos-transact
capability:
  exposes:
    - type: mcp
      namespace: direct-debits
      port: 8080
      tools:
        - name: get-mandate
          description: "Look up SEPA direct debit mandate details."
          inputParameters:
            - name: mandate_ref
              in: body
              type: string
              description: "The SEPA mandate reference."
          call: "temenos.get-mandate"
          with:
            mandate_ref: "{{mandate_ref}}"
          outputParameters:
            - name: creditor_name
              type: string
              mapping: "$.body.creditorName"
            - name: status
              type: string
              mapping: "$.body.mandateStatus"
            - name: max_amount
              type: string
              mapping: "$.body.maximumAmount"
  consumes:
    - type: http
      namespace: temenos
      baseUri: "https://core-banking.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.temenos_token"
      resources:
        - name: mandates
          path: "/payments/directDebits/mandates/{{mandate_ref}}"
          inputParameters:
            - name: mandate_ref
              in: path
          operations:
            - name: get-mandate
              method: GET

Retrieves IT change request details from ServiceNow for ING infrastructure changes, returning change type, approval status, risk assessment, and implementation window.

naftiko: "0.5"
info:
  label: "ServiceNow Change Request Lookup"
  description: "Retrieves IT change request details from ServiceNow for ING infrastructure changes, returning change type, approval status, risk assessment, and implementation window."
  tags:
    - it-service-management
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: change-management
      port: 8080
      tools:
        - name: get-change-request
          description: "Look up a change request in ServiceNow."
          inputParameters:
            - name: change_number
              in: body
              type: string
              description: "The ServiceNow change request number."
          call: "servicenow.get-change"
          with:
            change_number: "{{change_number}}"
          outputParameters:
            - name: type
              type: string
              mapping: "$.result.type"
            - name: approval_status
              type: string
              mapping: "$.result.approval"
            - name: risk
              type: string
              mapping: "$.result.risk"
            - name: implementation_window
              type: string
              mapping: "$.result.start_date"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://ing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: changes
          path: "/table/change_request?sysparm_query=number={{change_number}}"
          inputParameters:
            - name: change_number
              in: query
          operations:
            - name: get-change
              method: GET

Retrieves a ServiceNow incident by number, returning state, assigned group, and priority.

naftiko: "0.5"
info:
  label: "ServiceNow IT Incident Status Lookup"
  description: "Retrieves a ServiceNow incident by number, returning state, assigned group, and priority."
  tags:
    - it-operations
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: incident-status
      port: 8080
      tools:
        - name: get-incident
          description: "Look up a ServiceNow incident by number."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "Incident number."
          call: "servicenow.get-incident"
          with:
            incident_number: "{{incident_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result.state"
            - name: assigned_to
              type: string
              mapping: "$.result.assigned_to.display_value"
            - name: priority
              type: string
              mapping: "$.result.priority"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://ing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          inputParameters:
            - name: sysparm_query
              in: query
              value: "number={{incident_number}}"
          operations:
            - name: get-incident
              method: GET

Retrieves a compliance or policy document from SharePoint.

naftiko: "0.5"
info:
  label: "SharePoint Policy Document Retriever"
  description: "Retrieves a compliance or policy document from SharePoint."
  tags:
    - compliance
    - documents
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: policy-docs
      port: 8080
      tools:
        - name: get-policy-doc
          description: "Retrieve a policy document from SharePoint."
          inputParameters:
            - name: site_id
              in: body
              type: string
              description: "SharePoint site ID."
            - name: file_path
              in: body
              type: string
              description: "File path."
          call: "sharepoint.get-file"
          with:
            site_id: "{{site_id}}"
            file_path: "{{file_path}}"
          outputParameters:
            - name: download_url
              type: string
              mapping: "$.@microsoft.graph.downloadUrl"
            - name: file_name
              type: string
              mapping: "$.name"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: get-file
              method: GET

Queries Snowflake for customer risk analytics, returning risk score, exposure amount, probability of default, and loss given default for a customer segment.

naftiko: "0.5"
info:
  label: "Snowflake Customer Risk Analytics"
  description: "Queries Snowflake for customer risk analytics, returning risk score, exposure amount, probability of default, and loss given default for a customer segment."
  tags:
    - risk
    - analytics
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: customer-risk
      port: 8080
      tools:
        - name: get-risk-analytics
          description: "Query customer risk analytics from Snowflake."
          inputParameters:
            - name: customer_segment
              in: body
              type: string
              description: "The customer risk segment."
          call: "snowflake.query-risk"
          with:
            customer_segment: "{{customer_segment}}"
          outputParameters:
            - name: avg_risk_score
              type: string
              mapping: "$.data[0].avg_risk_score"
            - name: total_exposure
              type: string
              mapping: "$.data[0].total_exposure"
            - name: avg_pd
              type: string
              mapping: "$.data[0].avg_probability_of_default"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://ing.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query-risk
              method: POST

Runs a risk analytics query in Snowflake, returning portfolio-level risk metrics.

naftiko: "0.5"
info:
  label: "Snowflake Risk Analytics Query"
  description: "Runs a risk analytics query in Snowflake, returning portfolio-level risk metrics."
  tags:
    - risk
    - analytics
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: risk-analytics
      port: 8080
      tools:
        - name: query-risk-data
          description: "Run a risk analytics query in Snowflake."
          inputParameters:
            - name: portfolio_id
              in: body
              type: string
              description: "Portfolio identifier."
          call: "snowflake.execute-query"
          with:
            statement: "SELECT total_exposure, var_95, expected_loss, risk_weighted_assets FROM PORTFOLIO_RISK WHERE portfolio_id = '{{portfolio_id}}'"
          outputParameters:
            - name: total_exposure
              type: string
              mapping: "$.data[0][0]"
            - name: var_95
              type: string
              mapping: "$.data[0][1]"
            - name: expected_loss
              type: string
              mapping: "$.data[0][2]"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://ing.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-query
              method: POST

Retrieves a payment intent status from Stripe for ING's digital retail products.

naftiko: "0.5"
info:
  label: "Stripe Payment Gateway Status"
  description: "Retrieves a payment intent status from Stripe for ING's digital retail products."
  tags:
    - payments
    - e-commerce
    - stripe
capability:
  exposes:
    - type: mcp
      namespace: payment-gateway
      port: 8080
      tools:
        - name: get-payment-status
          description: "Look up a Stripe payment intent status."
          inputParameters:
            - name: payment_intent_id
              in: body
              type: string
              description: "Stripe payment intent ID."
          call: "stripe.get-payment-intent"
          with:
            payment_intent_id: "{{payment_intent_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: amount
              type: string
              mapping: "$.amount"
            - name: currency
              type: string
              mapping: "$.currency"
  consumes:
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: payment-intents
          path: "/payment_intents/{{payment_intent_id}}"
          inputParameters:
            - name: payment_intent_id
              in: path
          operations:
            - name: get-payment-intent
              method: GET

Tracks ING's green and sustainability bond portfolio performance, monitoring ESG compliance metrics and carbon offset reporting for institutional investors.

naftiko: "0.5"
info:
  label: "Sustainability Bond Portfolio Tracker"
  description: "Tracks ING's green and sustainability bond portfolio performance, monitoring ESG compliance metrics and carbon offset reporting for institutional investors."
  tags:
    - sustainable-finance
    - bonds
    - esg-reporting
capability:
  exposes:
    - type: mcp
      namespace: sustainability-bonds
      port: 8080
      tools:
        - name: get-bond-portfolio-metrics
          description: "Retrieve sustainability bond portfolio metrics and ESG scores."
          inputParameters:
            - name: portfolio_id
              in: body
              type: string
              description: "The bond portfolio identifier."
            - name: reporting_period
              in: body
              type: string
              description: "Reporting period in YYYY-QN format."
          call: "sustainable-finance-api.get-portfolio-metrics"
          with:
            portfolio: "{{portfolio_id}}"
            period: "{{reporting_period}}"
          outputParameters:
            - name: total_green_assets
              type: number
              mapping: "$.portfolio.totalGreenAssets"
            - name: carbon_offset_tonnes
              type: number
              mapping: "$.portfolio.carbonOffsetTonnes"
            - name: esg_compliance_score
              type: number
              mapping: "$.portfolio.esgComplianceScore"
  consumes:
    - type: http
      namespace: sustainable-finance-api
      baseUri: "https://api.ing.com/sustainable-finance/v1"
      authentication:
        type: bearer
        token: "$secrets.ing_sustainable_finance_token"
      resources:
        - name: portfolios
          path: "/bond-portfolios/{{portfolio}}/metrics"
          inputParameters:
            - name: portfolio
              in: path
          operations:
            - name: get-portfolio-metrics
              method: GET

Tracks a SWIFT GPI payment by UETR, returning payment status, last update timestamp, and beneficiary confirmation from the SWIFT network.

naftiko: "0.5"
info:
  label: "SWIFT GPI Payment Tracker"
  description: "Tracks a SWIFT GPI payment by UETR, returning payment status, last update timestamp, and beneficiary confirmation from the SWIFT network."
  tags:
    - payments
    - swift
    - banking
capability:
  exposes:
    - type: mcp
      namespace: swift-gpi
      port: 8080
      tools:
        - name: track-payment
          description: "Track a SWIFT GPI payment by UETR."
          inputParameters:
            - name: uetr
              in: body
              type: string
              description: "The Unique End-to-End Transaction Reference."
          call: "swift.get-payment-status"
          with:
            uetr: "{{uetr}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.transaction_status"
            - name: last_update
              type: string
              mapping: "$.last_update_time"
            - name: beneficiary_confirmed
              type: string
              mapping: "$.confirmed_amount"
  consumes:
    - type: http
      namespace: swift
      baseUri: "https://api.swift.com/swift-gpi/v4"
      authentication:
        type: bearer
        token: "$secrets.swift_gpi_token"
      resources:
        - name: payments
          path: "/payments/{{uetr}}"
          inputParameters:
            - name: uetr
              in: path
          operations:
            - name: get-payment-status
              method: GET

Retrieves fixed deposit account details from Temenos Transact, returning principal amount, interest rate, maturity date, and accrued interest.

naftiko: "0.5"
info:
  label: "Temenos Fixed Deposit Lookup"
  description: "Retrieves fixed deposit account details from Temenos Transact, returning principal amount, interest rate, maturity date, and accrued interest."
  tags:
    - banking
    - deposits
    - temenos-transact
capability:
  exposes:
    - type: mcp
      namespace: fixed-deposits
      port: 8080
      tools:
        - name: get-deposit
          description: "Look up a fixed deposit in Temenos Transact."
          inputParameters:
            - name: deposit_id
              in: body
              type: string
              description: "The fixed deposit account ID."
          call: "temenos.get-deposit"
          with:
            deposit_id: "{{deposit_id}}"
          outputParameters:
            - name: principal
              type: string
              mapping: "$.body.principalAmount"
            - name: interest_rate
              type: string
              mapping: "$.body.interestRate"
            - name: maturity_date
              type: string
              mapping: "$.body.maturityDate"
            - name: accrued_interest
              type: string
              mapping: "$.body.accruedInterest"
  consumes:
    - type: http
      namespace: temenos
      baseUri: "https://core-banking.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.temenos_token"
      resources:
        - name: deposits
          path: "/deposits/{{deposit_id}}"
          inputParameters:
            - name: deposit_id
              in: path
          operations:
            - name: get-deposit
              method: GET

Retrieves loan account balance details from Temenos Transact, returning outstanding principal, accrued interest, next payment date, and payment amount.

naftiko: "0.5"
info:
  label: "Temenos Loan Balance Lookup"
  description: "Retrieves loan account balance details from Temenos Transact, returning outstanding principal, accrued interest, next payment date, and payment amount."
  tags:
    - banking
    - lending
    - temenos-transact
capability:
  exposes:
    - type: mcp
      namespace: loan-accounts
      port: 8080
      tools:
        - name: get-loan-balance
          description: "Look up a loan account balance in Temenos Transact."
          inputParameters:
            - name: loan_id
              in: body
              type: string
              description: "The Temenos loan account ID."
          call: "temenos.get-loan"
          with:
            loan_id: "{{loan_id}}"
          outputParameters:
            - name: outstanding_principal
              type: string
              mapping: "$.body.outstandingPrincipal"
            - name: accrued_interest
              type: string
              mapping: "$.body.accruedInterest"
            - name: next_payment_date
              type: string
              mapping: "$.body.nextPaymentDate"
            - name: payment_amount
              type: string
              mapping: "$.body.paymentAmount"
  consumes:
    - type: http
      namespace: temenos
      baseUri: "https://core-banking.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.temenos_token"
      resources:
        - name: loans
          path: "/loans/{{loan_id}}"
          inputParameters:
            - name: loan_id
              in: path
          operations:
            - name: get-loan
              method: GET

Retrieves standing order details from Temenos Transact, returning beneficiary name, amount, frequency, and next execution date for an ING customer account.

naftiko: "0.5"
info:
  label: "Temenos Standing Order Lookup"
  description: "Retrieves standing order details from Temenos Transact, returning beneficiary name, amount, frequency, and next execution date for an ING customer account."
  tags:
    - banking
    - payments
    - temenos-transact
capability:
  exposes:
    - type: mcp
      namespace: standing-orders
      port: 8080
      tools:
        - name: get-standing-order
          description: "Look up a standing order in Temenos Transact."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The standing order ID."
          call: "temenos.get-standing-order"
          with:
            order_id: "{{order_id}}"
          outputParameters:
            - name: beneficiary
              type: string
              mapping: "$.body.beneficiaryName"
            - name: amount
              type: string
              mapping: "$.body.amount"
            - name: frequency
              type: string
              mapping: "$.body.frequency"
            - name: next_execution
              type: string
              mapping: "$.body.nextExecutionDate"
  consumes:
    - type: http
      namespace: temenos
      baseUri: "https://core-banking.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.temenos_token"
      resources:
        - name: standing-orders
          path: "/standing-orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-standing-order
              method: GET

Processes letter of credit applications for ING wholesale banking clients, managing document verification, beneficiary notifications, and settlement workflows.

naftiko: "0.5"
info:
  label: "Trade Finance Letter of Credit Processor"
  description: "Processes letter of credit applications for ING wholesale banking clients, managing document verification, beneficiary notifications, and settlement workflows."
  tags:
    - trade-finance
    - wholesale-banking
    - letter-of-credit
capability:
  exposes:
    - type: mcp
      namespace: letter-of-credit
      port: 8080
      tools:
        - name: process-letter-of-credit
          description: "Process a letter of credit application through verification stages."
          inputParameters:
            - name: application_id
              in: body
              type: string
              description: "The letter of credit application identifier."
            - name: client_id
              in: body
              type: string
              description: "The wholesale banking client identifier."
          call: "trade-finance-api.process-lc"
          with:
            application: "{{application_id}}"
            client: "{{client_id}}"
          outputParameters:
            - name: lc_number
              type: string
              mapping: "$.letterOfCredit.lcNumber"
            - name: status
              type: string
              mapping: "$.letterOfCredit.status"
            - name: expiry_date
              type: string
              mapping: "$.letterOfCredit.expiryDate"
  consumes:
    - type: http
      namespace: trade-finance-api
      baseUri: "https://api.ing.com/trade-finance/v1"
      authentication:
        type: bearer
        token: "$secrets.ing_trade_finance_token"
      resources:
        - name: letters-of-credit
          path: "/letters-of-credit"
          operations:
            - name: process-lc
              method: POST

Retrieves bond trade execution details from Tradeweb, returning execution price, yield, settlement date, and counterparty for ING fixed income trading.

naftiko: "0.5"
info:
  label: "Tradeweb Bond Execution Lookup"
  description: "Retrieves bond trade execution details from Tradeweb, returning execution price, yield, settlement date, and counterparty for ING fixed income trading."
  tags:
    - trading
    - fixed-income
    - tradeweb
capability:
  exposes:
    - type: mcp
      namespace: bond-execution
      port: 8080
      tools:
        - name: get-execution
          description: "Look up a bond trade execution on Tradeweb."
          inputParameters:
            - name: trade_id
              in: body
              type: string
              description: "The Tradeweb trade ID."
          call: "tradeweb.get-trade"
          with:
            trade_id: "{{trade_id}}"
          outputParameters:
            - name: price
              type: string
              mapping: "$.trade.executionPrice"
            - name: yield
              type: string
              mapping: "$.trade.yield"
            - name: settlement_date
              type: string
              mapping: "$.trade.settlementDate"
            - name: counterparty
              type: string
              mapping: "$.trade.counterparty"
  consumes:
    - type: http
      namespace: tradeweb
      baseUri: "https://api.tradeweb.com/v1"
      authentication:
        type: bearer
        token: "$secrets.tradeweb_token"
      resources:
        - name: trades
          path: "/trades/{{trade_id}}"
          inputParameters:
            - name: trade_id
              in: path
          operations:
            - name: get-trade
              method: GET

When a suspicious transaction alert fires, retrieves transaction details, creates a compliance case in ServiceNow, and notifies the AML team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Transaction Monitoring Alert Handler"
  description: "When a suspicious transaction alert fires, retrieves transaction details, creates a compliance case in ServiceNow, and notifies the AML team via Microsoft Teams."
  tags:
    - compliance
    - anti-money-laundering
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: transaction-monitoring
      port: 8080
      tools:
        - name: handle-alert
          description: "Process a transaction monitoring alert across ServiceNow and Teams."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "The transaction monitoring alert ID."
          steps:
            - name: get-alert
              type: call
              call: "txn-monitoring.get-alert"
              with:
                alert_id: "{{alert_id}}"
            - name: create-case
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "AML Alert: {{get-alert.customer_name}} - {{get-alert.alert_type}}"
                priority: "1"
                category: "aml_compliance"
                description: "Transaction: {{get-alert.transaction_id}}. Amount: {{get-alert.amount}} {{get-alert.currency}}. Score: {{get-alert.risk_score}}"
            - name: notify-aml
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "aml_investigations"
                text: "AML Alert {{alert_id}}: {{get-alert.customer_name}} - {{get-alert.alert_type}}. Amount: {{get-alert.amount}} {{get-alert.currency}}. Case: {{create-case.number}}"
  consumes:
    - type: http
      namespace: txn-monitoring
      baseUri: "https://txn-monitoring.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.txn_monitoring_token"
      resources:
        - name: alerts
          path: "/alerts/{{alert_id}}"
          inputParameters:
            - name: alert_id
              in: path
          operations:
            - name: get-alert
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://ing.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Manages daily liquidity by retrieving cash positions from Kondor, checking regulatory limits, executing money market transactions, and reporting to treasury management via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Treasury Liquidity Management Orchestrator"
  description: "Manages daily liquidity by retrieving cash positions from Kondor, checking regulatory limits, executing money market transactions, and reporting to treasury management via Microsoft Teams."
  tags:
    - treasury
    - liquidity
    - kondor
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: liquidity-management
      port: 8080
      tools:
        - name: manage-liquidity
          description: "Execute daily liquidity management operations."
          inputParameters:
            - name: currency
              in: body
              type: string
              description: "The currency code (EUR, USD, GBP)."
            - name: business_date
              in: body
              type: string
              description: "The business date."
          steps:
            - name: get-cash-position
              type: call
              call: "kondor.get-position"
              with:
                currency: "{{currency}}"
                date: "{{business_date}}"
            - name: check-limits
              type: call
              call: "risk-system.check-liquidity-limits"
              with:
                currency: "{{currency}}"
                position: "{{get-cash-position.net_position}}"
            - name: execute-placement
              type: call
              call: "kondor.create-money-market-deal"
              with:
                currency: "{{currency}}"
                amount: "{{check-limits.recommended_action_amount}}"
                direction: "{{check-limits.recommended_direction}}"
            - name: notify-treasury
              type: call
              call: "teams.send-message"
              with:
                channel: "Treasury_Operations"
                message: "Liquidity update for {{currency}} on {{business_date}}: Position {{get-cash-position.net_position}}. Action: {{check-limits.recommended_direction}} {{check-limits.recommended_action_amount}}. Deal ref: {{execute-placement.deal_id}}."
  consumes:
    - type: http
      namespace: kondor
      baseUri: "https://kondor.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.kondor_token"
      resources:
        - name: positions
          path: "/positions/cash"
          operations:
            - name: get-position
              method: GET
        - name: deals
          path: "/deals/money-market"
          operations:
            - name: create-money-market-deal
              method: POST
    - type: http
      namespace: risk-system
      baseUri: "https://risk-management.ing.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.risk_system_token"
      resources:
        - name: limits
          path: "/liquidity/check"
          operations:
            - name: check-liquidity-limits
              method: POST
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.teams_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Reviews and recalculates credit limits for ING wholesale banking clients based on updated financial statements, market conditions, and counterparty risk assessments.

naftiko: "0.5"
info:
  label: "Wholesale Client Credit Limit Reviewer"
  description: "Reviews and recalculates credit limits for ING wholesale banking clients based on updated financial statements, market conditions, and counterparty risk assessments."
  tags:
    - wholesale-banking
    - credit-risk
    - client-management
capability:
  exposes:
    - type: mcp
      namespace: credit-limit-review
      port: 8080
      tools:
        - name: review-credit-limit
          description: "Review and recalculate credit limit for a wholesale client."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The wholesale banking client identifier."
            - name: review_type
              in: body
              type: string
              description: "Review type such as annual, triggered, or ad-hoc."
          call: "credit-api.review-limit"
          with:
            client: "{{client_id}}"
            type: "{{review_type}}"
          outputParameters:
            - name: current_limit
              type: number
              mapping: "$.review.currentLimit"
            - name: proposed_limit
              type: number
              mapping: "$.review.proposedLimit"
            - name: risk_rating
              type: string
              mapping: "$.review.riskRating"
  consumes:
    - type: http
      namespace: credit-api
      baseUri: "https://api.ing.com/wholesale/v1"
      authentication:
        type: bearer
        token: "$secrets.ing_wholesale_credit_token"
      resources:
        - name: credit-limits
          path: "/clients/{{client}}/credit-limits/review"
          inputParameters:
            - name: client
              in: path
          operations:
            - name: review-limit
              method: POST

Retrieves employee compensation review data from Workday, returning current salary, proposed adjustment, merit rating, and review status.

naftiko: "0.5"
info:
  label: "Workday Compensation Review Lookup"
  description: "Retrieves employee compensation review data from Workday, returning current salary, proposed adjustment, merit rating, and review status."
  tags:
    - hr
    - workday
    - compensation
capability:
  exposes:
    - type: mcp
      namespace: compensation-reviews
      port: 8080
      tools:
        - name: get-comp-review
          description: "Look up a compensation review in Workday."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
          call: "workday.get-compensation"
          with:
            employee_id: "{{employee_id}}"
          outputParameters:
            - name: current_salary
              type: string
              mapping: "$.Worker.Compensation_Data.CurrentSalary"
            - name: proposed_adjustment
              type: string
              mapping: "$.Worker.Compensation_Data.ProposedAdjustment"
            - name: merit_rating
              type: string
              mapping: "$.Worker.Compensation_Data.MeritRating"
            - name: review_status
              type: string
              mapping: "$.Worker.Compensation_Data.ReviewStatus"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd3-impl-services1.workday.com/ccx/api/v1/ing"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: compensation
          path: "/workers/{{employee_id}}/compensation"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-compensation
              method: GET

Retrieves an ING employee's schedule from Workday.

naftiko: "0.5"
info:
  label: "Workday Employee Schedule Retriever"
  description: "Retrieves an ING employee's schedule from Workday."
  tags:
    - hr
    - scheduling
    - workday
capability:
  exposes:
    - type: mcp
      namespace: employee-scheduling
      port: 8080
      tools:
        - name: get-schedule
          description: "Retrieve employee schedule from Workday."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "Workday worker ID."
          call: "workday.get-schedule"
          with:
            worker_id: "{{worker_id}}"
          outputParameters:
            - name: shifts
              type: string
              mapping: "$.scheduleEntries"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: schedules
          path: "/workers/{{worker_id}}/schedule"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-schedule
              method: GET

Retrieves a payroll summary for an ING employee from Workday.

naftiko: "0.5"
info:
  label: "Workday Payroll Summary Retriever"
  description: "Retrieves a payroll summary for an ING employee from Workday."
  tags:
    - hr
    - payroll
    - workday
capability:
  exposes:
    - type: mcp
      namespace: payroll
      port: 8080
      tools:
        - name: get-payroll
          description: "Retrieve the latest payroll summary."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "Workday worker ID."
          call: "workday.get-payslip"
          with:
            worker_id: "{{worker_id}}"
          outputParameters:
            - name: gross_pay
              type: string
              mapping: "$.payslip.grossPay"
            - name: net_pay
              type: string
              mapping: "$.payslip.netPay"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: payslips
          path: "/workers/{{worker_id}}/paySlips"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-payslip
              method: GET