JP Morgan Chase Capabilities

Naftiko 0.5 capability definitions for JP Morgan Chase - 100 capabilities showing integration workflows and service orchestrations.

Sort
Expand

Looks up an ACH payment transaction by trace number from the JPMorgan payments hub. Returns status, settlement date, originator, and amount. Used by operations teams to research payment inquiries.

naftiko: "0.5"
info:
  label: "ACH Payment Retrieval"
  description: "Looks up an ACH payment transaction by trace number from the JPMorgan payments hub. Returns status, settlement date, originator, and amount. Used by operations teams to research payment inquiries."
  tags:
    - payments
    - ach
    - operations
capability:
  exposes:
    - type: mcp
      namespace: payments-ach
      port: 8080
      tools:
        - name: get-ach-payment
          description: "Look up an ACH payment by trace number. Returns payment status, settlement date, originator name, and amount."
          inputParameters:
            - name: trace_number
              in: body
              type: string
              description: "The ACH trace number (15-digit)."
          call: "payments-hub.get-ach"
          with:
            trace_number: "{{trace_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.payment.status"
            - name: settlement_date
              type: string
              mapping: "$.payment.settlementDate"
            - name: originator
              type: string
              mapping: "$.payment.originatorName"
            - name: amount
              type: number
              mapping: "$.payment.amount"
  consumes:
    - type: http
      namespace: payments-hub
      baseUri: "https://payments-hub.jpmorgan.com/api/v3"
      authentication:
        type: bearer
        token: "$secrets.payments_hub_token"
      resources:
        - name: ach-payments
          path: "/ach/{{trace_number}}"
          inputParameters:
            - name: trace_number
              in: path
          operations:
            - name: get-ach
              method: GET

# ---------------------------------------------------------------------------
# 8. Loan Facility Lookup (simple)
# ---------------------------------------------------------------------------

Validates an AI/ML model before production deployment by pulling model metadata from the model registry, running bias and fairness checks, logging results in the model risk management system, and notifying the MRM team.

naftiko: "0.5"
info:
  label: "AI Model Risk Validation Pipeline"
  description: "Validates an AI/ML model before production deployment by pulling model metadata from the model registry, running bias and fairness checks, logging results in the model risk management system, and notifying the MRM team."
  tags:
    - technology
    - ai
    - model-risk
    - compliance
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: ai-model-validation
      port: 8080
      tools:
        - name: validate-model
          description: "Retrieve model metadata, run validation checks, log results, and notify the MRM team."
          inputParameters:
            - name: model_id
              in: body
              type: string
              description: "The AI/ML model identifier in the registry."
            - name: validation_type
              in: body
              type: string
              description: "Type of validation (e.g., INITIAL, PERIODIC, MATERIAL_CHANGE)."
            - name: mrm_reviewer_email
              in: body
              type: string
              description: "Email of the model risk reviewer."
          steps:
            - name: get-model-metadata
              type: call
              call: "model-registry.get-model"
              with:
                model_id: "{{model_id}}"
            - name: run-validation
              type: call
              call: "model-validation-svc.validate"
              with:
                model_id: "{{model_id}}"
                validation_type: "{{validation_type}}"
                model_type: "{{get-model-metadata.modelType}}"
            - name: log-results
              type: call
              call: "mrm-system.log-validation"
              with:
                model_id: "{{model_id}}"
                validation_type: "{{validation_type}}"
                bias_score: "{{run-validation.biasScore}}"
                fairness_score: "{{run-validation.fairnessScore}}"
                overall_status: "{{run-validation.overallStatus}}"
            - name: notify-reviewer
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{mrm_reviewer_email}}"
                text: "Model validation complete: {{get-model-metadata.modelName}} ({{model_id}}). Type: {{validation_type}}. Bias: {{run-validation.biasScore}}. Fairness: {{run-validation.fairnessScore}}. Status: {{run-validation.overallStatus}}. MRM ref: {{log-results.validationRef}}."
  consumes:
    - type: http
      namespace: model-registry
      baseUri: "https://model-registry.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.model_registry_token"
      resources:
        - name: models
          path: "/models/{{model_id}}"
          inputParameters:
            - name: model_id
              in: path
          operations:
            - name: get-model
              method: GET
    - type: http
      namespace: model-validation-svc
      baseUri: "https://model-validation.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.model_validation_token"
      resources:
        - name: validations
          path: "/validate"
          operations:
            - name: validate
              method: POST
    - type: http
      namespace: mrm-system
      baseUri: "https://mrm-system.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.mrm_system_token"
      resources:
        - name: validations
          path: "/validations"
          operations:
            - name: log-validation
              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

# ---------------------------------------------------------------------------
# 42. ISO 20022 Payment Migration Validator (orchestrated)
# ---------------------------------------------------------------------------

Deploys a new algorithmic trading strategy by registering it in the algo management platform, configuring risk limits, activating on the execution gateway, and notifying the quant desk via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Algorithmic Trading Strategy Deployment"
  description: "Deploys a new algorithmic trading strategy by registering it in the algo management platform, configuring risk limits, activating on the execution gateway, and notifying the quant desk via Microsoft Teams."
  tags:
    - trading
    - algorithmic
    - risk
    - technology
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: algo-deployment
      port: 8080
      tools:
        - name: deploy-strategy
          description: "Register algo strategy, set risk limits, activate on gateway, and notify the desk."
          inputParameters:
            - name: strategy_id
              in: body
              type: string
              description: "The algo strategy identifier."
            - name: max_notional
              in: body
              type: number
              description: "Maximum notional per order."
            - name: max_participation_rate
              in: body
              type: number
              description: "Maximum participation rate as percentage."
            - name: quant_desk_email
              in: body
              type: string
              description: "Email of the quant desk lead."
          steps:
            - name: register-strategy
              type: call
              call: "algo-platform.register"
              with:
                strategy_id: "{{strategy_id}}"
            - name: set-limits
              type: call
              call: "risk-engine.set-algo-limits"
              with:
                strategy_id: "{{strategy_id}}"
                max_notional: "{{max_notional}}"
                max_participation_rate: "{{max_participation_rate}}"
            - name: activate
              type: call
              call: "fix-gw.activate-strategy"
              with:
                strategy_id: "{{strategy_id}}"
                limits_ref: "{{set-limits.limitsRef}}"
            - name: notify-desk
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{quant_desk_email}}"
                text: "Algo strategy {{strategy_id}} deployed. Max notional: {{max_notional}}. Max participation: {{max_participation_rate}}%. Gateway status: {{activate.status}}. Limits ref: {{set-limits.limitsRef}}."
  consumes:
    - type: http
      namespace: algo-platform
      baseUri: "https://algo-platform.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.algo_platform_token"
      resources:
        - name: strategies
          path: "/strategies"
          operations:
            - name: register
              method: POST
    - type: http
      namespace: risk-engine
      baseUri: "https://risk-engine.jpmorgan.com/api/v3"
      authentication:
        type: bearer
        token: "$secrets.risk_engine_token"
      resources:
        - name: algo-limits
          path: "/algo-limits"
          operations:
            - name: set-algo-limits
              method: POST
    - type: http
      namespace: fix-gw
      baseUri: "https://fix-gateway.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.fix_gateway_token"
      resources:
        - name: strategies
          path: "/strategies/activate"
          operations:
            - name: activate-strategy
              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

# ---------------------------------------------------------------------------
# 36. Private Banking Client Review Preparation (orchestrated)
# ---------------------------------------------------------------------------

When the AML engine flags a suspicious transaction, enriches it with customer KYC data, creates a case in the case management system, and notifies the BSA officer via email.

naftiko: "0.5"
info:
  label: "AML Transaction Monitoring and Escalation"
  description: "When the AML engine flags a suspicious transaction, enriches it with customer KYC data, creates a case in the case management system, and notifies the BSA officer via email."
  tags:
    - compliance
    - aml
    - kyc
    - case-management
capability:
  exposes:
    - type: mcp
      namespace: aml-monitoring
      port: 8080
      tools:
        - name: escalate-aml-alert
          description: "Enrich an AML alert with KYC data, create a compliance case, and notify the BSA officer."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "The AML alert identifier."
            - name: customer_id
              in: body
              type: string
              description: "The customer entity ID."
            - name: bsa_officer_email
              in: body
              type: string
              description: "Email of the BSA/AML officer."
          steps:
            - name: get-alert
              type: call
              call: "aml-engine.get-alert"
              with:
                alert_id: "{{alert_id}}"
            - name: get-kyc
              type: call
              call: "kyc-platform.get-entity"
              with:
                entity_id: "{{customer_id}}"
            - name: create-case
              type: call
              call: "case-mgmt.create-case"
              with:
                title: "AML Alert: {{get-alert.alertType}} — {{get-kyc.entityName}}"
                description: "Alert {{alert_id}} flagged transaction of {{get-alert.amount}} {{get-alert.currency}}. Customer risk tier: {{get-kyc.riskTier}}. KYC status: {{get-kyc.verificationStatus}}."
                priority: "high"
                category: "aml_investigation"
            - name: notify-bsa-officer
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{bsa_officer_email}}"
                text: "AML ALERT: Case {{create-case.caseId}} opened for {{get-kyc.entityName}}. Alert type: {{get-alert.alertType}}. Amount: {{get-alert.amount}} {{get-alert.currency}}. Risk tier: {{get-kyc.riskTier}}."
  consumes:
    - type: http
      namespace: aml-engine
      baseUri: "https://aml-engine.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.aml_engine_token"
      resources:
        - name: alerts
          path: "/alerts/{{alert_id}}"
          inputParameters:
            - name: alert_id
              in: path
          operations:
            - name: get-alert
              method: GET
    - type: http
      namespace: kyc-platform
      baseUri: "https://kyc-platform.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.kyc_platform_token"
      resources:
        - name: entities
          path: "/entities/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-entity
              method: GET
    - type: http
      namespace: case-mgmt
      baseUri: "https://case-management.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.case_mgmt_token"
      resources:
        - name: cases
          path: "/cases"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

# ---------------------------------------------------------------------------
# 22. FX Trade Lifecycle Orchestrator (orchestrated)
# ---------------------------------------------------------------------------

Provisions API access for a new client application by creating the API key in the gateway, configuring rate limits and scopes, registering the client in the developer portal, and notifying the integration team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "API Gateway Rate Limit and Access Provisioning"
  description: "Provisions API access for a new client application by creating the API key in the gateway, configuring rate limits and scopes, registering the client in the developer portal, and notifying the integration team via Microsoft Teams."
  tags:
    - technology
    - api-management
    - onboarding
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: api-provisioning
      port: 8080
      tools:
        - name: provision-api-access
          description: "Create API key, configure limits and scopes, register in portal, and notify integration team."
          inputParameters:
            - name: client_app_name
              in: body
              type: string
              description: "Name of the client application."
            - name: api_products
              in: body
              type: string
              description: "Comma-separated list of API product IDs to grant access to."
            - name: rate_limit
              in: body
              type: number
              description: "Requests per second limit."
            - name: integration_team_email
              in: body
              type: string
              description: "Email of the integration support team."
          steps:
            - name: create-api-key
              type: call
              call: "api-gateway.create-key"
              with:
                app_name: "{{client_app_name}}"
                products: "{{api_products}}"
            - name: configure-limits
              type: call
              call: "api-gateway.set-rate-limit"
              with:
                api_key_id: "{{create-api-key.keyId}}"
                rate_limit: "{{rate_limit}}"
            - name: register-portal
              type: call
              call: "dev-portal.register-app"
              with:
                app_name: "{{client_app_name}}"
                api_key_id: "{{create-api-key.keyId}}"
                products: "{{api_products}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{integration_team_email}}"
                text: "API access provisioned: {{client_app_name}}. Key ID: {{create-api-key.keyId}}. Products: {{api_products}}. Rate limit: {{rate_limit}} rps. Portal: {{register-portal.portalUrl}}."
  consumes:
    - type: http
      namespace: api-gateway
      baseUri: "https://api-gateway.jpmorgan.com/admin/v2"
      authentication:
        type: bearer
        token: "$secrets.api_gateway_token"
      resources:
        - name: keys
          path: "/keys"
          operations:
            - name: create-key
              method: POST
        - name: rate-limits
          path: "/keys/{{api_key_id}}/rate-limits"
          inputParameters:
            - name: api_key_id
              in: path
          operations:
            - name: set-rate-limit
              method: PUT
    - type: http
      namespace: dev-portal
      baseUri: "https://developer.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.dev_portal_token"
      resources:
        - name: apps
          path: "/apps"
          operations:
            - name: register-app
              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

Executes a derivatives pricing calculation in the Athena risk platform for a given trade ID. Returns mark-to-market value, Greeks, and model timestamp. Used by derivatives traders and quantitative analysts.

naftiko: "0.5"
info:
  label: "Athena Pricing Model Execution"
  description: "Executes a derivatives pricing calculation in the Athena risk platform for a given trade ID. Returns mark-to-market value, Greeks, and model timestamp. Used by derivatives traders and quantitative analysts."
  tags:
    - trading
    - derivatives
    - athena
    - pricing
capability:
  exposes:
    - type: mcp
      namespace: athena-pricing
      port: 8080
      tools:
        - name: price-trade
          description: "Run a pricing calculation for a derivatives trade in Athena by trade ID. Returns MTM, delta, gamma, vega, and model timestamp."
          inputParameters:
            - name: trade_id
              in: body
              type: string
              description: "The Athena trade identifier."
          call: "athena.price-trade"
          with:
            trade_id: "{{trade_id}}"
          outputParameters:
            - name: mtm_value
              type: number
              mapping: "$.pricing.mtm"
            - name: delta
              type: number
              mapping: "$.pricing.delta"
            - name: gamma
              type: number
              mapping: "$.pricing.gamma"
            - name: vega
              type: number
              mapping: "$.pricing.vega"
            - name: model_timestamp
              type: string
              mapping: "$.pricing.timestamp"
  consumes:
    - type: http
      namespace: athena
      baseUri: "https://athena.jpmorgan.com/api/v3"
      authentication:
        type: bearer
        token: "$secrets.athena_token"
      resources:
        - name: pricing
          path: "/trades/{{trade_id}}/price"
          inputParameters:
            - name: trade_id
              in: path
          operations:
            - name: price-trade
              method: POST

# ---------------------------------------------------------------------------
# 16. Trade Execution and Confirmation Orchestrator (orchestrated)
# ---------------------------------------------------------------------------

Processes an auto loan application by pulling credit data, running automated decisioning, generating loan documents, and notifying the dealer via the partner portal.

naftiko: "0.5"
info:
  label: "Auto Loan Origination Pipeline"
  description: "Processes an auto loan application by pulling credit data, running automated decisioning, generating loan documents, and notifying the dealer via the partner portal."
  tags:
    - lending
    - consumer-banking
    - auto
capability:
  exposes:
    - type: mcp
      namespace: auto-lending
      port: 8080
      tools:
        - name: originate-auto-loan
          description: "Process an auto loan application."
          inputParameters:
            - name: application_id
              in: body
              type: string
              description: "The loan application ID."
            - name: dealer_id
              in: body
              type: string
              description: "The dealer partner ID."
          steps:
            - name: pull-credit
              type: call
              call: "credit-bureau.pull-report"
              with:
                application_id: "{{application_id}}"
            - name: run-decision
              type: call
              call: "underwriting-engine.auto-decide"
              with:
                application_id: "{{application_id}}"
                credit_score: "{{pull-credit.fico_score}}"
            - name: generate-docs
              type: call
              call: "loan-platform.generate-documents"
              with:
                application_id: "{{application_id}}"
                decision: "{{run-decision.decision}}"
                rate: "{{run-decision.offered_rate}}"
            - name: notify-dealer
              type: call
              call: "dealer-portal.send-notification"
              with:
                dealer_id: "{{dealer_id}}"
                application_id: "{{application_id}}"
                decision: "{{run-decision.decision}}"
  consumes:
    - type: http
      namespace: credit-bureau
      baseUri: "https://credit-services.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.credit_bureau_token"
      resources:
        - name: reports
          path: "/reports/pull"
          operations:
            - name: pull-report
              method: POST
    - type: http
      namespace: underwriting-engine
      baseUri: "https://underwriting.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.underwriting_token"
      resources:
        - name: auto
          path: "/auto/decide"
          operations:
            - name: auto-decide
              method: POST
    - type: http
      namespace: loan-platform
      baseUri: "https://loan-platform.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.loan_platform_token"
      resources:
        - name: documents
          path: "/documents/generate"
          operations:
            - name: generate-documents
              method: POST
    - type: http
      namespace: dealer-portal
      baseUri: "https://dealer-portal.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.dealer_portal_token"
      resources:
        - name: notifications
          path: "/notifications"
          operations:
            - name: send-notification
              method: POST

Settles a tokenized payment on JPMorgan's Onyx blockchain platform by verifying the counterparty, creating the payment instruction, submitting to the blockchain ledger, and recording in the core banking system.

naftiko: "0.5"
info:
  label: "Blockchain Payment Rail Settlement"
  description: "Settles a tokenized payment on JPMorgan's Onyx blockchain platform by verifying the counterparty, creating the payment instruction, submitting to the blockchain ledger, and recording in the core banking system."
  tags:
    - payments
    - blockchain
    - onyx
    - technology
capability:
  exposes:
    - type: mcp
      namespace: blockchain-settlement
      port: 8080
      tools:
        - name: settle-on-chain
          description: "Verify counterparty, create instruction, submit to Onyx ledger, and record in core banking."
          inputParameters:
            - name: counterparty_id
              in: body
              type: string
              description: "The counterparty node identifier on Onyx."
            - name: amount
              in: body
              type: number
              description: "Settlement amount."
            - name: currency
              in: body
              type: string
              description: "Settlement currency."
            - name: reference
              in: body
              type: string
              description: "Payment reference."
          steps:
            - name: verify-counterparty
              type: call
              call: "onyx-platform.verify-node"
              with:
                node_id: "{{counterparty_id}}"
            - name: create-instruction
              type: call
              call: "onyx-platform.create-instruction"
              with:
                counterparty_id: "{{counterparty_id}}"
                amount: "{{amount}}"
                currency: "{{currency}}"
                reference: "{{reference}}"
            - name: submit-to-ledger
              type: call
              call: "onyx-platform.submit"
              with:
                instruction_id: "{{create-instruction.instructionId}}"
            - name: record-in-core
              type: call
              call: "core-banking.record-settlement"
              with:
                tx_hash: "{{submit-to-ledger.txHash}}"
                amount: "{{amount}}"
                currency: "{{currency}}"
                counterparty: "{{verify-counterparty.legalName}}"
                reference: "{{reference}}"
  consumes:
    - type: http
      namespace: onyx-platform
      baseUri: "https://onyx.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.onyx_token"
      resources:
        - name: nodes
          path: "/nodes/{{node_id}}/verify"
          inputParameters:
            - name: node_id
              in: path
          operations:
            - name: verify-node
              method: GET
        - name: instructions
          path: "/instructions"
          operations:
            - name: create-instruction
              method: POST
        - name: submit
          path: "/instructions/{{instruction_id}}/submit"
          inputParameters:
            - name: instruction_id
              in: path
          operations:
            - name: submit
              method: POST
    - type: http
      namespace: core-banking
      baseUri: "https://core-banking.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.core_banking_token"
      resources:
        - name: settlements
          path: "/settlements"
          operations:
            - name: record-settlement
              method: POST

# ---------------------------------------------------------------------------
# 45. Trade Finance Letter of Credit Issuance (orchestrated)
# ---------------------------------------------------------------------------

Retrieves real-time market data from Bloomberg Enterprise Data for JPMorgan trading desks, returning last price, bid/ask spread, and daily volume.

naftiko: "0.5"
info:
  label: "Bloomberg Market Data Feed"
  description: "Retrieves real-time market data from Bloomberg Enterprise Data for JPMorgan trading desks, returning last price, bid/ask spread, and daily volume."
  tags:
    - market-data
    - bloomberg-enterprise-data
    - trading
capability:
  exposes:
    - type: mcp
      namespace: market-data-feed
      port: 8080
      tools:
        - name: get-market-data
          description: "Retrieve real-time market data from Bloomberg."
          inputParameters:
            - name: security_id
              in: body
              type: string
              description: "The Bloomberg security identifier."
          call: "bloomberg.get-quote"
          with:
            security_id: "{{security_id}}"
          outputParameters:
            - name: last_price
              type: string
              mapping: "$.data[0].lastPrice"
            - name: bid
              type: string
              mapping: "$.data[0].bid"
            - name: ask
              type: string
              mapping: "$.data[0].ask"
            - name: volume
              type: number
              mapping: "$.data[0].volume"
  consumes:
    - type: http
      namespace: bloomberg
      baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/v1"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_token"
      resources:
        - name: quotes
          path: "/securities/{{security_id}}/quotes"
          inputParameters:
            - name: security_id
              in: path
          operations:
            - name: get-quote
              method: GET

At end of day, retrieves sub-account balances for a corporate client, calculates the net position, and executes a zero-balance sweep to the master account via the payments hub. Notifies the treasury team.

naftiko: "0.5"
info:
  label: "Cash Management Sweep Orchestrator"
  description: "At end of day, retrieves sub-account balances for a corporate client, calculates the net position, and executes a zero-balance sweep to the master account via the payments hub. Notifies the treasury team."
  tags:
    - treasury
    - cash-management
    - payments
    - commercial-banking
capability:
  exposes:
    - type: mcp
      namespace: cash-sweep
      port: 8080
      tools:
        - name: execute-sweep
          description: "Retrieve sub-account balances, calculate net, and execute zero-balance sweep to master account."
          inputParameters:
            - name: master_account_id
              in: body
              type: string
              description: "The master account identifier."
            - name: client_id
              in: body
              type: string
              description: "The corporate client ID."
            - name: treasurer_email
              in: body
              type: string
              description: "Email of the client treasurer for notification."
          steps:
            - name: get-balances
              type: call
              call: "core-banking.get-sub-accounts"
              with:
                client_id: "{{client_id}}"
                master_account_id: "{{master_account_id}}"
            - name: calc-sweep
              type: call
              call: "cash-mgmt.calculate-sweep"
              with:
                master_account_id: "{{master_account_id}}"
                sub_account_balances: "{{get-balances.subAccounts}}"
            - name: execute-transfers
              type: call
              call: "payments-hub.execute-sweep"
              with:
                master_account_id: "{{master_account_id}}"
                transfers: "{{calc-sweep.transfers}}"
            - name: notify-treasurer
              type: call
              call: "messaging.send-confirmation"
              with:
                client_id: "{{client_id}}"
                message: "EOD sweep completed. {{calc-sweep.transferCount}} transfers executed. Net swept: {{calc-sweep.netAmount}} {{calc-sweep.currency}}. Master balance: {{execute-transfers.masterBalance}}."
  consumes:
    - type: http
      namespace: core-banking
      baseUri: "https://core-banking.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.core_banking_token"
      resources:
        - name: sub-accounts
          path: "/clients/{{client_id}}/accounts/{{master_account_id}}/sub-accounts"
          inputParameters:
            - name: client_id
              in: path
            - name: master_account_id
              in: path
          operations:
            - name: get-sub-accounts
              method: GET
    - type: http
      namespace: cash-mgmt
      baseUri: "https://cash-management.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.cash_mgmt_token"
      resources:
        - name: sweeps
          path: "/sweeps/calculate"
          operations:
            - name: calculate-sweep
              method: POST
    - type: http
      namespace: payments-hub
      baseUri: "https://payments-hub.jpmorgan.com/api/v3"
      authentication:
        type: bearer
        token: "$secrets.payments_hub_token"
      resources:
        - name: sweeps
          path: "/sweeps"
          operations:
            - name: execute-sweep
              method: POST
    - type: http
      namespace: messaging
      baseUri: "https://client-messaging.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.messaging_token"
      resources:
        - name: confirmations
          path: "/confirmations"
          operations:
            - name: send-confirmation
              method: POST

# ---------------------------------------------------------------------------
# 27. Equity Research Distribution Pipeline (orchestrated)
# ---------------------------------------------------------------------------

Orchestrates periodic KYC refresh by pulling client data from the CRM, running sanctions screening, updating risk classification, and creating a review case in the compliance system.

naftiko: "0.5"
info:
  label: "Client KYC Refresh Orchestrator"
  description: "Orchestrates periodic KYC refresh by pulling client data from the CRM, running sanctions screening, updating risk classification, and creating a review case in the compliance system."
  tags:
    - compliance
    - kyc
    - sanctions
capability:
  exposes:
    - type: mcp
      namespace: kyc-refresh
      port: 8080
      tools:
        - name: refresh-kyc
          description: "Orchestrate a KYC refresh for a client."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The client ID."
          steps:
            - name: get-client-data
              type: call
              call: "crm.get-client"
              with:
                client_id: "{{client_id}}"
            - name: screen-sanctions
              type: call
              call: "sanctions.screen-entity"
              with:
                entity_name: "{{get-client-data.legal_name}}"
                entity_type: "{{get-client-data.entity_type}}"
                country: "{{get-client-data.domicile}}"
            - name: update-risk
              type: call
              call: "risk-system.update-classification"
              with:
                client_id: "{{client_id}}"
                sanctions_result: "{{screen-sanctions.result}}"
                pep_status: "{{screen-sanctions.pep_match}}"
            - name: create-review
              type: call
              call: "compliance-system.create-case"
              with:
                client_id: "{{client_id}}"
                case_type: "KYC_Refresh"
                risk_rating: "{{update-risk.new_rating}}"
                sanctions_hits: "{{screen-sanctions.hit_count}}"
  consumes:
    - type: http
      namespace: crm
      baseUri: "https://crm.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.crm_token"
      resources:
        - name: clients
          path: "/clients/{{client_id}}"
          inputParameters:
            - name: client_id
              in: path
          operations:
            - name: get-client
              method: GET
    - type: http
      namespace: sanctions
      baseUri: "https://sanctions-screening.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sanctions_token"
      resources:
        - name: screening
          path: "/screen"
          operations:
            - name: screen-entity
              method: POST
    - type: http
      namespace: risk-system
      baseUri: "https://risk-management.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.risk_system_token"
      resources:
        - name: classification
          path: "/clients/classify"
          operations:
            - name: update-classification
              method: POST
    - type: http
      namespace: compliance-system
      baseUri: "https://compliance.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.compliance_token"
      resources:
        - name: cases
          path: "/cases"
          operations:
            - name: create-case
              method: POST

Orchestrates new institutional client onboarding by creating the entity in the KYC platform, screening against sanctions, provisioning accounts in the core banking system, and notifying the relationship manager via Salesforce.

naftiko: "0.5"
info:
  label: "Client Onboarding Orchestrator"
  description: "Orchestrates new institutional client onboarding by creating the entity in the KYC platform, screening against sanctions, provisioning accounts in the core banking system, and notifying the relationship manager via Salesforce."
  tags:
    - onboarding
    - compliance
    - kyc
    - sanctions
    - commercial-banking
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: client-onboarding
      port: 8080
      tools:
        - name: onboard-client
          description: "Create KYC entity, screen against sanctions, provision core banking accounts, and notify the RM in Salesforce."
          inputParameters:
            - name: legal_name
              in: body
              type: string
              description: "Full legal name of the entity."
            - name: lei
              in: body
              type: string
              description: "Legal Entity Identifier."
            - name: country_code
              in: body
              type: string
              description: "Country of incorporation."
            - name: rm_email
              in: body
              type: string
              description: "Relationship manager email address."
          steps:
            - name: create-kyc-entity
              type: call
              call: "kyc-platform.create-entity"
              with:
                legal_name: "{{legal_name}}"
                lei: "{{lei}}"
                country_code: "{{country_code}}"
            - name: screen-entity
              type: call
              call: "sanctions-svc.screen"
              with:
                party_name: "{{legal_name}}"
                country_code: "{{country_code}}"
            - name: provision-account
              type: call
              call: "core-banking.create-account"
              with:
                entity_id: "{{create-kyc-entity.entityId}}"
                legal_name: "{{legal_name}}"
                account_type: "commercial_deposit"
            - name: notify-rm
              type: call
              call: "salesforce.create-task"
              with:
                subject: "New client onboarded: {{legal_name}}"
                description: "KYC entity {{create-kyc-entity.entityId}} created. Account {{provision-account.accountNumber}} provisioned. Sanctions screening score: {{screen-entity.highestMatchScore}}."
                owner_email: "{{rm_email}}"
  consumes:
    - type: http
      namespace: kyc-platform
      baseUri: "https://kyc-platform.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.kyc_platform_token"
      resources:
        - name: entities
          path: "/entities"
          operations:
            - name: create-entity
              method: POST
    - type: http
      namespace: sanctions-svc
      baseUri: "https://sanctions-screening.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.sanctions_svc_token"
      resources:
        - name: screenings
          path: "/screen"
          operations:
            - name: screen
              method: POST
    - type: http
      namespace: core-banking
      baseUri: "https://core-banking.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.core_banking_token"
      resources:
        - name: accounts
          path: "/accounts"
          operations:
            - name: create-account
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://jpmorgan.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: tasks
          path: "/sobjects/Task"
          operations:
            - name: create-task
              method: POST

# ---------------------------------------------------------------------------
# 19. Daily P&L Report with Risk Breach Alerting (orchestrated)
# ---------------------------------------------------------------------------

Orchestrates client relationship reviews by pulling revenue data from the CRM, analyzing wallet share, generating the review presentation, and scheduling the client meeting.

naftiko: "0.5"
info:
  label: "Client Relationship Review Pipeline"
  description: "Orchestrates client relationship reviews by pulling revenue data from the CRM, analyzing wallet share, generating the review presentation, and scheduling the client meeting."
  tags:
    - client-management
    - commercial-banking
    - crm
capability:
  exposes:
    - type: mcp
      namespace: client-review
      port: 8080
      tools:
        - name: prepare-review
          description: "Prepare a client relationship review."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The client ID."
            - name: review_period
              in: body
              type: string
              description: "The review period."
          steps:
            - name: get-revenue
              type: call
              call: "crm.get-client-revenue"
              with:
                client_id: "{{client_id}}"
                period: "{{review_period}}"
            - name: analyze-wallet
              type: call
              call: "analytics.wallet-share-analysis"
              with:
                client_id: "{{client_id}}"
                revenue: "{{get-revenue.total_revenue}}"
            - name: generate-presentation
              type: call
              call: "doc-gen.create-review-deck"
              with:
                client_id: "{{client_id}}"
                revenue: "{{get-revenue.total_revenue}}"
                wallet_share: "{{analyze-wallet.wallet_share_pct}}"
                opportunities: "{{analyze-wallet.opportunities}}"
  consumes:
    - type: http
      namespace: crm
      baseUri: "https://crm.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.crm_token"
      resources:
        - name: revenue
          path: "/clients/{{client_id}}/revenue"
          inputParameters:
            - name: client_id
              in: path
          operations:
            - name: get-client-revenue
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://analytics.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: wallet-share
          path: "/wallet-share/analyze"
          operations:
            - name: wallet-share-analysis
              method: POST
    - type: http
      namespace: doc-gen
      baseUri: "https://doc-generation.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.docgen_token"
      resources:
        - name: presentations
          path: "/review-decks"
          operations:
            - name: create-review-deck
              method: POST

Retrieves collateral valuation for margin calculations, returning market value, haircut percentage, eligible value, and margin deficit/excess.

naftiko: "0.5"
info:
  label: "Collateral Margin Valuation"
  description: "Retrieves collateral valuation for margin calculations, returning market value, haircut percentage, eligible value, and margin deficit/excess."
  tags:
    - risk
    - collateral
    - derivatives
capability:
  exposes:
    - type: mcp
      namespace: collateral-valuation
      port: 8080
      tools:
        - name: get-collateral-value
          description: "Retrieve collateral valuation for margin."
          inputParameters:
            - name: agreement_id
              in: body
              type: string
              description: "The collateral agreement ID."
          call: "collateral.get-valuation"
          with:
            agreement_id: "{{agreement_id}}"
          outputParameters:
            - name: market_value
              type: string
              mapping: "$.valuation.marketValue"
            - name: haircut_pct
              type: string
              mapping: "$.valuation.haircutPercentage"
            - name: eligible_value
              type: string
              mapping: "$.valuation.eligibleValue"
            - name: margin_status
              type: string
              mapping: "$.valuation.marginStatus"
  consumes:
    - type: http
      namespace: collateral
      baseUri: "https://collateral.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.collateral_token"
      resources:
        - name: valuations
          path: "/agreements/{{agreement_id}}/valuation"
          inputParameters:
            - name: agreement_id
              in: path
          operations:
            - name: get-valuation
              method: GET

Retrieves account analysis statement for commercial banking clients, returning average balance, earnings credit rate, service charges, and net position.

naftiko: "0.5"
info:
  label: "Commercial Banking Account Analysis"
  description: "Retrieves account analysis statement for commercial banking clients, returning average balance, earnings credit rate, service charges, and net position."
  tags:
    - commercial-banking
    - accounts
capability:
  exposes:
    - type: mcp
      namespace: account-analysis
      port: 8080
      tools:
        - name: get-analysis
          description: "Retrieve commercial account analysis statement."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The commercial account ID."
            - name: statement_period
              in: body
              type: string
              description: "The statement period."
          call: "commercial-banking.get-analysis"
          with:
            account_id: "{{account_id}}"
            statement_period: "{{statement_period}}"
          outputParameters:
            - name: avg_balance
              type: string
              mapping: "$.analysis.averageBalance"
            - name: ecr
              type: string
              mapping: "$.analysis.earningsCreditRate"
            - name: service_charges
              type: string
              mapping: "$.analysis.totalServiceCharges"
            - name: net_position
              type: string
              mapping: "$.analysis.netPosition"
  consumes:
    - type: http
      namespace: commercial-banking
      baseUri: "https://commercial.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.commercial_token"
      resources:
        - name: analysis
          path: "/accounts/{{account_id}}/analysis"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-analysis
              method: GET

Enrolls a corporate client into the commercial card program by creating the card account in the card platform, setting spend controls, provisioning to the expense management system, and notifying the client via email.

naftiko: "0.5"
info:
  label: "Commercial Card Program Enrollment"
  description: "Enrolls a corporate client into the commercial card program by creating the card account in the card platform, setting spend controls, provisioning to the expense management system, and notifying the client via email."
  tags:
    - commercial-banking
    - cards
    - payments
    - expense-management
capability:
  exposes:
    - type: mcp
      namespace: card-enrollment
      port: 8080
      tools:
        - name: enroll-card-program
          description: "Create card account, set controls, link to expense system, and notify client."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The corporate client identifier."
            - name: program_type
              in: body
              type: string
              description: "Card program type (e.g., PURCHASING, TRAVEL, FLEET)."
            - name: monthly_limit
              in: body
              type: number
              description: "Monthly aggregate spend limit."
            - name: client_contact_email
              in: body
              type: string
              description: "Email of the client program administrator."
          steps:
            - name: create-card-account
              type: call
              call: "card-platform.create-account"
              with:
                client_id: "{{client_id}}"
                program_type: "{{program_type}}"
            - name: set-controls
              type: call
              call: "card-platform.set-controls"
              with:
                card_account_id: "{{create-card-account.cardAccountId}}"
                monthly_limit: "{{monthly_limit}}"
                program_type: "{{program_type}}"
            - name: link-expense-system
              type: call
              call: "concur.create-card-feed"
              with:
                card_account_id: "{{create-card-account.cardAccountId}}"
                client_id: "{{client_id}}"
            - name: notify-client
              type: call
              call: "email-service.send"
              with:
                to: "{{client_contact_email}}"
                subject: "Commercial Card Program Enrolled: {{program_type}}"
                body: "Your {{program_type}} card program has been activated. Account: {{create-card-account.cardAccountId}}. Monthly limit: ${{monthly_limit}}. Expense feed connected. Program ID: {{link-expense-system.feedId}}."
  consumes:
    - type: http
      namespace: card-platform
      baseUri: "https://card-platform.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.card_platform_token"
      resources:
        - name: accounts
          path: "/accounts"
          operations:
            - name: create-account
              method: POST
        - name: controls
          path: "/accounts/{{card_account_id}}/controls"
          inputParameters:
            - name: card_account_id
              in: path
          operations:
            - name: set-controls
              method: POST
    - type: http
      namespace: concur
      baseUri: "https://www.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: card-feeds
          path: "/expense/cardfeeds"
          operations:
            - name: create-card-feed
              method: POST
    - type: http
      namespace: email-service
      baseUri: "https://email-service.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_service_token"
      resources:
        - name: emails
          path: "/send"
          operations:
            - name: send
              method: POST

# ---------------------------------------------------------------------------
# 41. AI Model Risk Validation Pipeline (orchestrated)
# ---------------------------------------------------------------------------

Monitors commercial loan covenant compliance, returning covenant type, current ratio, threshold, and compliance status for each active covenant.

naftiko: "0.5"
info:
  label: "Commercial Loan Covenant Monitor"
  description: "Monitors commercial loan covenant compliance, returning covenant type, current ratio, threshold, and compliance status for each active covenant."
  tags:
    - lending
    - commercial-banking
    - risk
capability:
  exposes:
    - type: mcp
      namespace: covenant-monitoring
      port: 8080
      tools:
        - name: check-covenants
          description: "Check covenant compliance for a commercial loan."
          inputParameters:
            - name: facility_id
              in: body
              type: string
              description: "The lending facility ID."
          call: "lending.get-covenants"
          with:
            facility_id: "{{facility_id}}"
          outputParameters:
            - name: covenant_count
              type: number
              mapping: "$.covenants.length"
            - name: breaches
              type: number
              mapping: "$.covenants.breachCount"
            - name: next_test_date
              type: string
              mapping: "$.covenants.nextTestDate"
  consumes:
    - type: http
      namespace: lending
      baseUri: "https://lending-platform.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lending_token"
      resources:
        - name: covenants
          path: "/facilities/{{facility_id}}/covenants"
          inputParameters:
            - name: facility_id
              in: path
          operations:
            - name: get-covenants
              method: GET

Orchestrates a commercial loan from credit check through facility creation: pulls the counterparty credit score, screens against sanctions, creates the loan facility, and logs the deal in Salesforce.

naftiko: "0.5"
info:
  label: "Commercial Loan Origination Pipeline"
  description: "Orchestrates a commercial loan from credit check through facility creation: pulls the counterparty credit score, screens against sanctions, creates the loan facility, and logs the deal in Salesforce."
  tags:
    - commercial-banking
    - lending
    - risk
    - credit
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: loan-origination
      port: 8080
      tools:
        - name: originate-loan
          description: "Run credit check, sanctions screen, create loan facility, and log in CRM."
          inputParameters:
            - name: borrower_lei
              in: body
              type: string
              description: "LEI of the borrowing entity."
            - name: borrower_name
              in: body
              type: string
              description: "Legal name of the borrower."
            - name: country_code
              in: body
              type: string
              description: "Borrower domicile country code."
            - name: facility_amount
              in: body
              type: number
              description: "Requested facility commitment amount."
            - name: maturity_years
              in: body
              type: number
              description: "Facility tenor in years."
            - name: rm_email
              in: body
              type: string
              description: "Relationship manager email."
          steps:
            - name: credit-check
              type: call
              call: "risk-engine.get-credit-profile"
              with:
                lei: "{{borrower_lei}}"
            - name: sanctions-screen
              type: call
              call: "sanctions-svc.screen"
              with:
                party_name: "{{borrower_name}}"
                country_code: "{{country_code}}"
            - name: create-facility
              type: call
              call: "loan-system.create-facility"
              with:
                borrower_lei: "{{borrower_lei}}"
                commitment_amount: "{{facility_amount}}"
                maturity_years: "{{maturity_years}}"
                internal_rating: "{{credit-check.internalRating}}"
            - name: log-deal
              type: call
              call: "salesforce.create-opportunity"
              with:
                name: "Loan facility: {{borrower_name}} — ${{facility_amount}}"
                stage: "Closed Won"
                amount: "{{facility_amount}}"
                description: "Facility {{create-facility.facilityId}} created. Rating: {{credit-check.internalRating}}. PD: {{credit-check.probabilityOfDefault}}. Sanctions score: {{sanctions-screen.highestMatchScore}}."
                owner_email: "{{rm_email}}"
  consumes:
    - type: http
      namespace: risk-engine
      baseUri: "https://risk-engine.jpmorgan.com/api/v3"
      authentication:
        type: bearer
        token: "$secrets.risk_engine_token"
      resources:
        - name: credit-profiles
          path: "/counterparties/{{lei}}/credit-profile"
          inputParameters:
            - name: lei
              in: path
          operations:
            - name: get-credit-profile
              method: GET
    - type: http
      namespace: sanctions-svc
      baseUri: "https://sanctions-screening.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.sanctions_svc_token"
      resources:
        - name: screenings
          path: "/screen"
          operations:
            - name: screen
              method: POST
    - type: http
      namespace: loan-system
      baseUri: "https://loan-origination.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.loan_system_token"
      resources:
        - name: facilities
          path: "/facilities"
          operations:
            - name: create-facility
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://jpmorgan.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity"
          operations:
            - name: create-opportunity
              method: POST

# ---------------------------------------------------------------------------
# 24. Derivatives Margin Call Orchestrator (orchestrated)
# ---------------------------------------------------------------------------

Retrieves commercial real estate loan details from the lending platform, returning outstanding balance, LTV ratio, debt service coverage ratio, and maturity date.

naftiko: "0.5"
info:
  label: "Commercial Real Estate Loan Status"
  description: "Retrieves commercial real estate loan details from the lending platform, returning outstanding balance, LTV ratio, debt service coverage ratio, and maturity date."
  tags:
    - lending
    - commercial-banking
    - real-estate
capability:
  exposes:
    - type: mcp
      namespace: cre-lending
      port: 8080
      tools:
        - name: get-cre-loan
          description: "Look up a commercial real estate loan."
          inputParameters:
            - name: loan_id
              in: body
              type: string
              description: "The CRE loan ID."
          call: "lending.get-cre-loan"
          with:
            loan_id: "{{loan_id}}"
          outputParameters:
            - name: outstanding_balance
              type: string
              mapping: "$.loan.outstandingBalance"
            - name: ltv_ratio
              type: string
              mapping: "$.loan.ltvRatio"
            - name: dscr
              type: string
              mapping: "$.loan.debtServiceCoverageRatio"
            - name: maturity_date
              type: string
              mapping: "$.loan.maturityDate"
  consumes:
    - type: http
      namespace: lending
      baseUri: "https://lending-platform.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lending_token"
      resources:
        - name: cre-loans
          path: "/cre/loans/{{loan_id}}"
          inputParameters:
            - name: loan_id
              in: path
          operations:
            - name: get-cre-loan
              method: GET

Retrieves commodity futures position data from the OMS, returning contract details, quantity, average price, and unrealized P&L.

naftiko: "0.5"
info:
  label: "Commodity Futures Position Lookup"
  description: "Retrieves commodity futures position data from the OMS, returning contract details, quantity, average price, and unrealized P&L."
  tags:
    - trading
    - commodities
capability:
  exposes:
    - type: mcp
      namespace: commodity-positions
      port: 8080
      tools:
        - name: get-futures-position
          description: "Look up a commodity futures position."
          inputParameters:
            - name: contract_id
              in: body
              type: string
              description: "The futures contract ID."
          call: "oms.get-position"
          with:
            contract_id: "{{contract_id}}"
          outputParameters:
            - name: contract
              type: string
              mapping: "$.position.contractName"
            - name: quantity
              type: number
              mapping: "$.position.quantity"
            - name: avg_price
              type: string
              mapping: "$.position.averagePrice"
            - name: unrealized_pnl
              type: string
              mapping: "$.position.unrealizedPnL"
  consumes:
    - type: http
      namespace: oms
      baseUri: "https://oms.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.oms_token"
      resources:
        - name: positions
          path: "/positions/futures/{{contract_id}}"
          inputParameters:
            - name: contract_id
              in: path
          operations:
            - name: get-position
              method: GET

Orchestrates regulatory trade reporting by extracting trades from the OMS, formatting for EMIR/Dodd-Frank, submitting to the trade repository, and logging confirmation in the compliance system.

naftiko: "0.5"
info:
  label: "Compliance Trade Reporting Pipeline"
  description: "Orchestrates regulatory trade reporting by extracting trades from the OMS, formatting for EMIR/Dodd-Frank, submitting to the trade repository, and logging confirmation in the compliance system."
  tags:
    - compliance
    - regulatory
    - trading
capability:
  exposes:
    - type: mcp
      namespace: trade-reporting
      port: 8080
      tools:
        - name: report-trades
          description: "Submit trades to regulatory trade repository."
          inputParameters:
            - name: business_date
              in: body
              type: string
              description: "The business date."
            - name: asset_class
              in: body
              type: string
              description: "The asset class (rates, credit, equity, fx)."
          steps:
            - name: extract-trades
              type: call
              call: "oms.get-reportable-trades"
              with:
                date: "{{business_date}}"
                asset_class: "{{asset_class}}"
            - name: format-reports
              type: call
              call: "reporting-engine.format-regulatory"
              with:
                trade_count: "{{extract-trades.trade_count}}"
                regime: "EMIR"
            - name: submit-to-tr
              type: call
              call: "trade-repository.submit"
              with:
                report_batch_id: "{{format-reports.batch_id}}"
            - name: log-confirmation
              type: call
              call: "compliance-system.log-submission"
              with:
                business_date: "{{business_date}}"
                trade_count: "{{extract-trades.trade_count}}"
                tr_confirmation: "{{submit-to-tr.confirmation_id}}"
  consumes:
    - type: http
      namespace: oms
      baseUri: "https://oms.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.oms_token"
      resources:
        - name: trades
          path: "/trades/reportable"
          operations:
            - name: get-reportable-trades
              method: GET
    - type: http
      namespace: reporting-engine
      baseUri: "https://regulatory-reporting.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.reporting_token"
      resources:
        - name: formatting
          path: "/format"
          operations:
            - name: format-regulatory
              method: POST
    - type: http
      namespace: trade-repository
      baseUri: "https://trade-repository.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.tr_token"
      resources:
        - name: submissions
          path: "/submit"
          operations:
            - name: submit
              method: POST
    - type: http
      namespace: compliance-system
      baseUri: "https://compliance.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.compliance_token"
      resources:
        - name: logs
          path: "/submissions/log"
          operations:
            - name: log-submission
              method: POST

Orchestrates consumer checking account opening by verifying identity, running ChexSystems screening, creating the account in the core banking system, and ordering a debit card via the card platform.

naftiko: "0.5"
info:
  label: "Consumer Account Opening Orchestrator"
  description: "Orchestrates consumer checking account opening by verifying identity, running ChexSystems screening, creating the account in the core banking system, and ordering a debit card via the card platform."
  tags:
    - consumer-banking
    - onboarding
    - accounts
capability:
  exposes:
    - type: mcp
      namespace: consumer-account-opening
      port: 8080
      tools:
        - name: open-checking-account
          description: "Open a consumer checking account."
          inputParameters:
            - name: customer_name
              in: body
              type: string
              description: "The customer full name."
            - name: ssn_last4
              in: body
              type: string
              description: "Last 4 of SSN."
            - name: address
              in: body
              type: string
              description: "Customer address."
          steps:
            - name: verify-identity
              type: call
              call: "identity-service.verify"
              with:
                name: "{{customer_name}}"
                ssn_last4: "{{ssn_last4}}"
            - name: screen-chexsystems
              type: call
              call: "chexsystems.screen"
              with:
                customer_id: "{{verify-identity.customer_id}}"
            - name: create-account
              type: call
              call: "core-banking.create-account"
              with:
                customer_id: "{{verify-identity.customer_id}}"
                product_type: "checking"
                address: "{{address}}"
            - name: order-card
              type: call
              call: "card-platform.order-debit-card"
              with:
                account_id: "{{create-account.account_id}}"
                customer_name: "{{customer_name}}"
                address: "{{address}}"
  consumes:
    - type: http
      namespace: identity-service
      baseUri: "https://identity.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.identity_token"
      resources:
        - name: verification
          path: "/verify"
          operations:
            - name: verify
              method: POST
    - type: http
      namespace: chexsystems
      baseUri: "https://chexsystems.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.chexsystems_token"
      resources:
        - name: screening
          path: "/screen"
          operations:
            - name: screen
              method: POST
    - type: http
      namespace: core-banking
      baseUri: "https://core-banking.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.core_banking_token"
      resources:
        - name: accounts
          path: "/accounts"
          operations:
            - name: create-account
              method: POST
    - type: http
      namespace: card-platform
      baseUri: "https://card-services.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.card_platform_token"
      resources:
        - name: cards
          path: "/debit-cards/order"
          operations:
            - name: order-debit-card
              method: POST

Retrieves fraud alert details for a consumer credit card transaction, returning alert score, transaction details, merchant, and recommended action.

naftiko: "0.5"
info:
  label: "Consumer Credit Card Fraud Alert"
  description: "Retrieves fraud alert details for a consumer credit card transaction, returning alert score, transaction details, merchant, and recommended action."
  tags:
    - fraud-detection
    - consumer-banking
    - credit-cards
capability:
  exposes:
    - type: mcp
      namespace: card-fraud
      port: 8080
      tools:
        - name: get-fraud-alert
          description: "Look up a credit card fraud alert."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "The fraud alert ID."
          call: "fraud-engine.get-alert"
          with:
            alert_id: "{{alert_id}}"
          outputParameters:
            - name: risk_score
              type: number
              mapping: "$.alert.riskScore"
            - name: transaction_amount
              type: string
              mapping: "$.alert.transactionAmount"
            - name: merchant
              type: string
              mapping: "$.alert.merchantName"
            - name: recommended_action
              type: string
              mapping: "$.alert.recommendedAction"
  consumes:
    - type: http
      namespace: fraud-engine
      baseUri: "https://fraud-detection.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.fraud_engine_token"
      resources:
        - name: alerts
          path: "/alerts/{{alert_id}}"
          inputParameters:
            - name: alert_id
              in: path
          operations:
            - name: get-alert
              method: GET

Processes a consumer mortgage application by pulling credit reports, running automated underwriting, generating the loan estimate, and notifying the loan officer via the CRM.

naftiko: "0.5"
info:
  label: "Consumer Mortgage Origination Pipeline"
  description: "Processes a consumer mortgage application by pulling credit reports, running automated underwriting, generating the loan estimate, and notifying the loan officer via the CRM."
  tags:
    - lending
    - mortgage
    - consumer-banking
capability:
  exposes:
    - type: mcp
      namespace: mortgage-origination
      port: 8080
      tools:
        - name: originate-mortgage
          description: "Process a consumer mortgage application."
          inputParameters:
            - name: application_id
              in: body
              type: string
              description: "The mortgage application ID."
            - name: borrower_id
              in: body
              type: string
              description: "The borrower ID."
          steps:
            - name: pull-credit
              type: call
              call: "credit-bureau.pull-report"
              with:
                borrower_id: "{{borrower_id}}"
            - name: run-underwriting
              type: call
              call: "underwriting-engine.evaluate"
              with:
                application_id: "{{application_id}}"
                credit_score: "{{pull-credit.fico_score}}"
                dti_ratio: "{{pull-credit.dti}}"
            - name: generate-estimate
              type: call
              call: "loan-platform.generate-le"
              with:
                application_id: "{{application_id}}"
                rate: "{{run-underwriting.offered_rate}}"
                term: "{{run-underwriting.term}}"
            - name: notify-lo
              type: call
              call: "crm.create-task"
              with:
                subject: "Mortgage app {{application_id}}: {{run-underwriting.decision}}"
                description: "FICO: {{pull-credit.fico_score}}. Rate: {{run-underwriting.offered_rate}}. Loan estimate generated: {{generate-estimate.le_id}}."
  consumes:
    - type: http
      namespace: credit-bureau
      baseUri: "https://credit-services.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.credit_bureau_token"
      resources:
        - name: reports
          path: "/reports/pull"
          operations:
            - name: pull-report
              method: POST
    - type: http
      namespace: underwriting-engine
      baseUri: "https://underwriting.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.underwriting_token"
      resources:
        - name: evaluation
          path: "/evaluate"
          operations:
            - name: evaluate
              method: POST
    - type: http
      namespace: loan-platform
      baseUri: "https://mortgage-platform.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.mortgage_platform_token"
      resources:
        - name: loan-estimates
          path: "/loan-estimates"
          operations:
            - name: generate-le
              method: POST
    - type: http
      namespace: crm
      baseUri: "https://crm.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.crm_token"
      resources:
        - name: tasks
          path: "/tasks"
          operations:
            - name: create-task
              method: POST

Retrieves consumer savings account details from the core banking system, returning current balance, APY, interest earned YTD, and account status.

naftiko: "0.5"
info:
  label: "Consumer Savings Account Lookup"
  description: "Retrieves consumer savings account details from the core banking system, returning current balance, APY, interest earned YTD, and account status."
  tags:
    - consumer-banking
    - savings
    - accounts
capability:
  exposes:
    - type: mcp
      namespace: consumer-savings
      port: 8080
      tools:
        - name: get-savings-account
          description: "Look up a consumer savings account."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The savings account ID."
          call: "core-banking.get-savings"
          with:
            account_id: "{{account_id}}"
          outputParameters:
            - name: balance
              type: string
              mapping: "$.account.currentBalance"
            - name: apy
              type: string
              mapping: "$.account.apy"
            - name: interest_ytd
              type: string
              mapping: "$.account.interestEarnedYTD"
            - name: status
              type: string
              mapping: "$.account.status"
  consumes:
    - type: http
      namespace: core-banking
      baseUri: "https://core-banking.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.core_banking_token"
      resources:
        - name: savings
          path: "/savings/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-savings
              method: GET

Orchestrates a corporate bond issuance by setting up the deal in the IB platform, pricing via the syndication desk, allocating to investors, and confirming settlement via the custody system.

naftiko: "0.5"
info:
  label: "Corporate Bond Issuance Orchestrator"
  description: "Orchestrates a corporate bond issuance by setting up the deal in the IB platform, pricing via the syndication desk, allocating to investors, and confirming settlement via the custody system."
  tags:
    - investment-banking
    - fixed-income
    - capital-markets
capability:
  exposes:
    - type: mcp
      namespace: bond-issuance
      port: 8080
      tools:
        - name: process-issuance
          description: "Process a corporate bond issuance."
          inputParameters:
            - name: deal_id
              in: body
              type: string
              description: "The deal ID."
            - name: issuer
              in: body
              type: string
              description: "The issuer name."
            - name: notional
              in: body
              type: string
              description: "The issuance size."
          steps:
            - name: setup-deal
              type: call
              call: "ib-platform.create-deal"
              with:
                deal_id: "{{deal_id}}"
                issuer: "{{issuer}}"
                notional: "{{notional}}"
            - name: price-deal
              type: call
              call: "syndication.price-bond"
              with:
                deal_id: "{{deal_id}}"
                benchmark: "{{setup-deal.benchmark_rate}}"
            - name: allocate-investors
              type: call
              call: "syndication.allocate"
              with:
                deal_id: "{{deal_id}}"
                final_spread: "{{price-deal.final_spread}}"
            - name: confirm-settlement
              type: call
              call: "custody.setup-settlement"
              with:
                deal_id: "{{deal_id}}"
                isin: "{{price-deal.isin}}"
                settlement_date: "{{price-deal.settlement_date}}"
  consumes:
    - type: http
      namespace: ib-platform
      baseUri: "https://ib-platform.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ib_platform_token"
      resources:
        - name: deals
          path: "/deals"
          operations:
            - name: create-deal
              method: POST
    - type: http
      namespace: syndication
      baseUri: "https://syndication.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.syndication_token"
      resources:
        - name: pricing
          path: "/pricing"
          operations:
            - name: price-bond
              method: POST
        - name: allocation
          path: "/allocations"
          operations:
            - name: allocate
              method: POST
    - type: http
      namespace: custody
      baseUri: "https://custody.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.custody_token"
      resources:
        - name: settlement
          path: "/setup"
          operations:
            - name: setup-settlement
              method: POST

Retrieves current exposure for a counterparty, checks against approved credit limits, and if utilization exceeds threshold, creates a limit breach event and notifies the credit officer via ServiceNow and Teams.

naftiko: "0.5"
info:
  label: "Counterparty Credit Limit Monitoring"
  description: "Retrieves current exposure for a counterparty, checks against approved credit limits, and if utilization exceeds threshold, creates a limit breach event and notifies the credit officer via ServiceNow and Teams."
  tags:
    - risk
    - credit
    - counterparty
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: credit-limit-monitoring
      port: 8080
      tools:
        - name: check-credit-limit
          description: "Retrieve counterparty exposure, compare to limits, and escalate breaches."
          inputParameters:
            - name: counterparty_lei
              in: body
              type: string
              description: "LEI of the counterparty."
            - name: credit_officer_email
              in: body
              type: string
              description: "Email of the responsible credit officer."
          steps:
            - name: get-exposure
              type: call
              call: "risk-engine.get-exposure"
              with:
                lei: "{{counterparty_lei}}"
            - name: get-limits
              type: call
              call: "risk-engine.get-credit-limits"
              with:
                lei: "{{counterparty_lei}}"
            - name: create-breach-event
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Credit limit breach: {{get-exposure.counterpartyName}} utilization {{get-exposure.utilizationPct}}%"
                category: "credit_risk"
                assigned_group: "Credit_Risk"
                description: "Current exposure: {{get-exposure.totalExposure}}. Approved limit: {{get-limits.approvedLimit}}. Utilization: {{get-exposure.utilizationPct}}%."
            - name: notify-credit-officer
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{credit_officer_email}}"
                text: "CREDIT LIMIT ALERT: {{get-exposure.counterpartyName}} at {{get-exposure.utilizationPct}}% utilization. Exposure: {{get-exposure.totalExposure}}. Limit: {{get-limits.approvedLimit}}. Incident: {{create-breach-event.number}}."
  consumes:
    - type: http
      namespace: risk-engine
      baseUri: "https://risk-engine.jpmorgan.com/api/v3"
      authentication:
        type: bearer
        token: "$secrets.risk_engine_token"
      resources:
        - name: exposure
          path: "/counterparties/{{lei}}/exposure"
          inputParameters:
            - name: lei
              in: path
          operations:
            - name: get-exposure
              method: GET
        - name: credit-limits
          path: "/counterparties/{{lei}}/limits"
          inputParameters:
            - name: lei
              in: path
          operations:
            - name: get-credit-limits
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://jpmorgan.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

# ---------------------------------------------------------------------------
# 29. Trade Surveillance Alert Pipeline (orchestrated)
# ---------------------------------------------------------------------------

Retrieves credit card rewards balance for Chase cardholders, returning points balance, pending points, tier status, and redemption options.

naftiko: "0.5"
info:
  label: "Credit Card Rewards Balance Lookup"
  description: "Retrieves credit card rewards balance for Chase cardholders, returning points balance, pending points, tier status, and redemption options."
  tags:
    - consumer-banking
    - credit-cards
    - rewards
capability:
  exposes:
    - type: mcp
      namespace: card-rewards
      port: 8080
      tools:
        - name: get-rewards-balance
          description: "Look up credit card rewards balance."
          inputParameters:
            - name: card_id
              in: body
              type: string
              description: "The credit card account ID."
          call: "card-platform.get-rewards"
          with:
            card_id: "{{card_id}}"
          outputParameters:
            - name: points_balance
              type: number
              mapping: "$.rewards.pointsBalance"
            - name: pending_points
              type: number
              mapping: "$.rewards.pendingPoints"
            - name: tier_status
              type: string
              mapping: "$.rewards.tierStatus"
  consumes:
    - type: http
      namespace: card-platform
      baseUri: "https://card-services.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.card_platform_token"
      resources:
        - name: rewards
          path: "/cards/{{card_id}}/rewards"
          inputParameters:
            - name: card_id
              in: path
          operations:
            - name: get-rewards
              method: GET

Retrieves CDS pricing data from the pricing engine, returning spread, upfront fee, recovery rate, and implied probability of default for credit trading.

naftiko: "0.5"
info:
  label: "Credit Default Swap Pricing Lookup"
  description: "Retrieves CDS pricing data from the pricing engine, returning spread, upfront fee, recovery rate, and implied probability of default for credit trading."
  tags:
    - trading
    - credit
    - derivatives
capability:
  exposes:
    - type: mcp
      namespace: cds-pricing
      port: 8080
      tools:
        - name: get-cds-price
          description: "Look up CDS pricing for a reference entity."
          inputParameters:
            - name: reference_entity
              in: body
              type: string
              description: "The reference entity name or ticker."
            - name: tenor
              in: body
              type: string
              description: "The CDS tenor (e.g. 5Y)."
          call: "athena.price-cds"
          with:
            reference_entity: "{{reference_entity}}"
            tenor: "{{tenor}}"
          outputParameters:
            - name: spread_bps
              type: number
              mapping: "$.pricing.spread"
            - name: upfront_pct
              type: string
              mapping: "$.pricing.upfront"
            - name: recovery_rate
              type: string
              mapping: "$.pricing.recoveryRate"
            - name: implied_pd
              type: string
              mapping: "$.pricing.impliedPD"
  consumes:
    - type: http
      namespace: athena
      baseUri: "https://athena.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.athena_token"
      resources:
        - name: cds
          path: "/pricing/cds"
          operations:
            - name: price-cds
              method: POST

Retrieves credit exposure data for a counterparty, returning current exposure, potential future exposure, credit limit, and utilization percentage.

naftiko: "0.5"
info:
  label: "Credit Exposure Counterparty Lookup"
  description: "Retrieves credit exposure data for a counterparty, returning current exposure, potential future exposure, credit limit, and utilization percentage."
  tags:
    - risk
    - credit
    - counterparty
capability:
  exposes:
    - type: mcp
      namespace: credit-exposure
      port: 8080
      tools:
        - name: get-exposure
          description: "Look up credit exposure for a counterparty."
          inputParameters:
            - name: counterparty_id
              in: body
              type: string
              description: "The counterparty ID."
          call: "risk-engine.get-exposure"
          with:
            counterparty_id: "{{counterparty_id}}"
          outputParameters:
            - name: current_exposure
              type: string
              mapping: "$.exposure.currentExposure"
            - name: pfe
              type: string
              mapping: "$.exposure.potentialFutureExposure"
            - name: credit_limit
              type: string
              mapping: "$.exposure.creditLimit"
            - name: utilization_pct
              type: string
              mapping: "$.exposure.utilizationPercentage"
  consumes:
    - type: http
      namespace: risk-engine
      baseUri: "https://risk-engine.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.risk_engine_token"
      resources:
        - name: exposure
          path: "/credit/counterparty/{{counterparty_id}}"
          inputParameters:
            - name: counterparty_id
              in: path
          operations:
            - name: get-exposure
              method: GET

Queries the internal credit risk engine for the probability-of-default score and credit rating of a counterparty by LEI. Used by credit officers and relationship managers during onboarding and periodic reviews.

naftiko: "0.5"
info:
  label: "Credit Risk Score Retrieval"
  description: "Queries the internal credit risk engine for the probability-of-default score and credit rating of a counterparty by LEI. Used by credit officers and relationship managers during onboarding and periodic reviews."
  tags:
    - risk
    - credit
    - counterparty
capability:
  exposes:
    - type: mcp
      namespace: credit-risk
      port: 8080
      tools:
        - name: get-credit-score
          description: "Look up a counterparty credit risk profile by Legal Entity Identifier (LEI). Returns PD score, internal rating, and last review date."
          inputParameters:
            - name: lei
              in: body
              type: string
              description: "The 20-character Legal Entity Identifier of the counterparty."
          call: "risk-engine.get-credit-profile"
          with:
            lei: "{{lei}}"
          outputParameters:
            - name: pd_score
              type: number
              mapping: "$.creditProfile.probabilityOfDefault"
            - name: internal_rating
              type: string
              mapping: "$.creditProfile.internalRating"
            - name: last_review_date
              type: string
              mapping: "$.creditProfile.lastReviewDate"
  consumes:
    - type: http
      namespace: risk-engine
      baseUri: "https://risk-engine.jpmorgan.com/api/v3"
      authentication:
        type: bearer
        token: "$secrets.risk_engine_token"
      resources:
        - name: credit-profiles
          path: "/counterparties/{{lei}}/credit-profile"
          inputParameters:
            - name: lei
              in: path
          operations:
            - name: get-credit-profile
              method: GET

# ---------------------------------------------------------------------------
# 5. KYC Document Retrieval (simple)
# ---------------------------------------------------------------------------

Before initiating a SWIFT cross-border payment, screens the beneficiary against sanctions lists, converts currency via FX pricing, and submits the payment. Alerts compliance if screening returns a match.

naftiko: "0.5"
info:
  label: "Cross-Border Payment with Sanctions Screening"
  description: "Before initiating a SWIFT cross-border payment, screens the beneficiary against sanctions lists, converts currency via FX pricing, and submits the payment. Alerts compliance if screening returns a match."
  tags:
    - payments
    - swift
    - compliance
    - sanctions
    - fx
capability:
  exposes:
    - type: mcp
      namespace: cross-border-payments
      port: 8080
      tools:
        - name: initiate-screened-payment
          description: "Screen the beneficiary, obtain FX rate, and initiate a SWIFT cross-border payment. Halts and alerts compliance on sanctions match."
          inputParameters:
            - name: beneficiary_name
              in: body
              type: string
              description: "Full name of the beneficiary."
            - name: beneficiary_bic
              in: body
              type: string
              description: "SWIFT BIC of the beneficiary bank."
            - name: beneficiary_account
              in: body
              type: string
              description: "Beneficiary account number or IBAN."
            - name: amount
              in: body
              type: number
              description: "Payment amount in source currency."
            - name: source_currency
              in: body
              type: string
              description: "ISO currency code of the source."
            - name: target_currency
              in: body
              type: string
              description: "ISO currency code of the beneficiary."
            - name: country_code
              in: body
              type: string
              description: "Country code of the beneficiary."
          steps:
            - name: screen-beneficiary
              type: call
              call: "sanctions-svc.screen"
              with:
                party_name: "{{beneficiary_name}}"
                country_code: "{{country_code}}"
            - name: get-fx-rate
              type: call
              call: "fx-engine.get-spot"
              with:
                currency_pair: "{{source_currency}}{{target_currency}}"
            - name: submit-payment
              type: call
              call: "swift-payments.initiate"
              with:
                beneficiary_name: "{{beneficiary_name}}"
                beneficiary_bic: "{{beneficiary_bic}}"
                beneficiary_account: "{{beneficiary_account}}"
                amount: "{{amount}}"
                source_currency: "{{source_currency}}"
                target_currency: "{{target_currency}}"
                fx_rate: "{{get-fx-rate.mid}}"
  consumes:
    - type: http
      namespace: sanctions-svc
      baseUri: "https://sanctions-screening.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.sanctions_svc_token"
      resources:
        - name: screenings
          path: "/screen"
          operations:
            - name: screen
              method: POST
    - type: http
      namespace: fx-engine
      baseUri: "https://fx-pricing.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.fx_engine_token"
      resources:
        - name: spot-rates
          path: "/spot/{{currency_pair}}"
          inputParameters:
            - name: currency_pair
              in: path
          operations:
            - name: get-spot
              method: GET
    - type: http
      namespace: swift-payments
      baseUri: "https://payments-hub.jpmorgan.com/api/v3"
      authentication:
        type: bearer
        token: "$secrets.payments_hub_token"
      resources:
        - name: swift
          path: "/swift/payments"
          operations:
            - name: initiate
              method: POST

# ---------------------------------------------------------------------------
# 18. Client Onboarding Orchestrator (orchestrated)
# ---------------------------------------------------------------------------

Retrieves cross-currency swap valuation from Athena, returning NPV, accrued interest, current notional exchange rate, and next payment date.

naftiko: "0.5"
info:
  label: "Cross-Currency Swap Valuation"
  description: "Retrieves cross-currency swap valuation from Athena, returning NPV, accrued interest, current notional exchange rate, and next payment date."
  tags:
    - trading
    - derivatives
    - fx
capability:
  exposes:
    - type: mcp
      namespace: xccy-swaps
      port: 8080
      tools:
        - name: value-xccy-swap
          description: "Value a cross-currency swap via Athena."
          inputParameters:
            - name: trade_id
              in: body
              type: string
              description: "The trade ID."
          call: "athena.value-swap"
          with:
            trade_id: "{{trade_id}}"
          outputParameters:
            - name: npv
              type: string
              mapping: "$.valuation.npv"
            - name: accrued_interest
              type: string
              mapping: "$.valuation.accruedInterest"
            - name: fx_rate
              type: string
              mapping: "$.valuation.currentFxRate"
            - name: next_payment
              type: string
              mapping: "$.valuation.nextPaymentDate"
  consumes:
    - type: http
      namespace: athena
      baseUri: "https://athena.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.athena_token"
      resources:
        - name: valuations
          path: "/valuations/xccy-swaps/{{trade_id}}"
          inputParameters:
            - name: trade_id
              in: path
          operations:
            - name: value-swap
              method: GET

Retrieves the latest cash and securities balances for a custody account from the global custody platform. Used by asset managers and fund administrators for daily reconciliation.

naftiko: "0.5"
info:
  label: "Custody Account Balance Lookup"
  description: "Retrieves the latest cash and securities balances for a custody account from the global custody platform. Used by asset managers and fund administrators for daily reconciliation."
  tags:
    - custody
    - asset-management
    - reconciliation
capability:
  exposes:
    - type: mcp
      namespace: custody
      port: 8080
      tools:
        - name: get-custody-balance
          description: "Fetch cash and securities balances for a custody account by account ID. Returns total AUM, cash balance, and number of holdings."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The custody account identifier."
          call: "custody-platform.get-balance"
          with:
            account_id: "{{account_id}}"
          outputParameters:
            - name: total_aum
              type: number
              mapping: "$.account.totalAUM"
            - name: cash_balance
              type: number
              mapping: "$.account.cashBalance"
            - name: holdings_count
              type: number
              mapping: "$.account.holdingsCount"
  consumes:
    - type: http
      namespace: custody-platform
      baseUri: "https://custody-api.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.custody_api_token"
      resources:
        - name: accounts
          path: "/accounts/{{account_id}}/balances"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-balance
              method: GET

# ---------------------------------------------------------------------------
# 14. Regulatory Report Status (simple)
# ---------------------------------------------------------------------------

When a corporate action event is announced, retrieves affected holdings from the custody platform, calculates entitlements, records elections, and notifies the asset manager via the client portal.

naftiko: "0.5"
info:
  label: "Custody Corporate Action Processing"
  description: "When a corporate action event is announced, retrieves affected holdings from the custody platform, calculates entitlements, records elections, and notifies the asset manager via the client portal."
  tags:
    - custody
    - corporate-actions
    - asset-management
capability:
  exposes:
    - type: mcp
      namespace: corporate-actions
      port: 8080
      tools:
        - name: process-corporate-action
          description: "Identify affected holdings, calculate entitlements, record elections, and notify the asset manager."
          inputParameters:
            - name: event_id
              in: body
              type: string
              description: "The corporate action event identifier."
            - name: account_id
              in: body
              type: string
              description: "The custody account affected."
            - name: election
              in: body
              type: string
              description: "The client election choice (e.g., CASH, STOCK)."
          steps:
            - name: get-event
              type: call
              call: "corp-actions-svc.get-event"
              with:
                event_id: "{{event_id}}"
            - name: get-holdings
              type: call
              call: "custody-platform.get-holdings"
              with:
                account_id: "{{account_id}}"
                isin: "{{get-event.isin}}"
            - name: calc-entitlement
              type: call
              call: "corp-actions-svc.calculate-entitlement"
              with:
                event_id: "{{event_id}}"
                quantity: "{{get-holdings.quantity}}"
                election: "{{election}}"
            - name: record-election
              type: call
              call: "corp-actions-svc.submit-election"
              with:
                event_id: "{{event_id}}"
                account_id: "{{account_id}}"
                election: "{{election}}"
                entitled_amount: "{{calc-entitlement.entitledAmount}}"
  consumes:
    - type: http
      namespace: corp-actions-svc
      baseUri: "https://corp-actions.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.corp_actions_token"
      resources:
        - name: events
          path: "/events/{{event_id}}"
          inputParameters:
            - name: event_id
              in: path
          operations:
            - name: get-event
              method: GET
        - name: entitlements
          path: "/entitlements/calculate"
          operations:
            - name: calculate-entitlement
              method: POST
        - name: elections
          path: "/elections"
          operations:
            - name: submit-election
              method: POST
    - type: http
      namespace: custody-platform
      baseUri: "https://custody-api.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.custody_api_token"
      resources:
        - name: holdings
          path: "/accounts/{{account_id}}/holdings"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-holdings
              method: GET

# ---------------------------------------------------------------------------
# 32. Stress Test Scenario Execution (orchestrated)
# ---------------------------------------------------------------------------

Retrieves fund NAV calculation from the custody platform, returning total assets, total liabilities, NAV per share, and shares outstanding for fund administration.

naftiko: "0.5"
info:
  label: "Custody Fund NAV Calculation"
  description: "Retrieves fund NAV calculation from the custody platform, returning total assets, total liabilities, NAV per share, and shares outstanding for fund administration."
  tags:
    - custody
    - fund-administration
    - asset-management
capability:
  exposes:
    - type: mcp
      namespace: fund-nav
      port: 8080
      tools:
        - name: get-nav
          description: "Retrieve fund NAV calculation."
          inputParameters:
            - name: fund_id
              in: body
              type: string
              description: "The fund ID."
            - name: nav_date
              in: body
              type: string
              description: "The NAV calculation date."
          call: "custody.get-nav"
          with:
            fund_id: "{{fund_id}}"
            nav_date: "{{nav_date}}"
          outputParameters:
            - name: total_assets
              type: string
              mapping: "$.nav.totalAssets"
            - name: total_liabilities
              type: string
              mapping: "$.nav.totalLiabilities"
            - name: nav_per_share
              type: string
              mapping: "$.nav.navPerShare"
            - name: shares_outstanding
              type: number
              mapping: "$.nav.sharesOutstanding"
  consumes:
    - type: http
      namespace: custody
      baseUri: "https://custody.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.custody_token"
      resources:
        - name: nav
          path: "/funds/{{fund_id}}/nav?date={{nav_date}}"
          inputParameters:
            - name: fund_id
              in: path
            - name: nav_date
              in: query
          operations:
            - name: get-nav
              method: GET

Fetches end-of-day P&L from the trading book, retrieves VaR limits, and if P&L exceeds VaR threshold, creates a risk breach incident in ServiceNow and notifies the desk head via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Daily P&L Report with Risk Breach Alerting"
  description: "Fetches end-of-day P&L from the trading book, retrieves VaR limits, and if P&L exceeds VaR threshold, creates a risk breach incident in ServiceNow and notifies the desk head via Microsoft Teams."
  tags:
    - trading
    - risk
    - market-risk
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: daily-pnl-risk
      port: 8080
      tools:
        - name: check-pnl-breach
          description: "Retrieve daily P&L for a trading book, compare against VaR limits, and escalate if breached."
          inputParameters:
            - name: book_id
              in: body
              type: string
              description: "The trading book identifier."
            - name: trade_date
              in: body
              type: string
              description: "The trade date in YYYY-MM-DD format."
            - name: desk_head_email
              in: body
              type: string
              description: "Email of the desk head for escalation."
          steps:
            - name: get-pnl
              type: call
              call: "pnl-service.get-daily-pnl"
              with:
                book_id: "{{book_id}}"
                trade_date: "{{trade_date}}"
            - name: get-var-limits
              type: call
              call: "risk-engine.get-var"
              with:
                book_id: "{{book_id}}"
            - name: create-breach-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "VaR breach: Book {{book_id}} P&L {{get-pnl.dailyPnl}} exceeds VaR-99 {{get-var-limits.confidence99}}"
                category: "risk_breach"
                assigned_group: "Market_Risk"
                description: "Trading book {{book_id}} reported daily P&L of {{get-pnl.dailyPnl}} on {{trade_date}}, exceeding VaR-99 limit of {{get-var-limits.confidence99}}."
            - name: notify-desk-head
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{desk_head_email}}"
                text: "RISK ALERT: Book {{book_id}} daily P&L ({{get-pnl.dailyPnl}}) breached VaR-99 ({{get-var-limits.confidence99}}) on {{trade_date}}. Incident: {{create-breach-incident.number}}."
  consumes:
    - type: http
      namespace: pnl-service
      baseUri: "https://pnl-service.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.pnl_service_token"
      resources:
        - name: daily-pnl
          path: "/books/{{book_id}}/pnl/{{trade_date}}"
          inputParameters:
            - name: book_id
              in: path
            - name: trade_date
              in: path
          operations:
            - name: get-daily-pnl
              method: GET
    - type: http
      namespace: risk-engine
      baseUri: "https://risk-engine.jpmorgan.com/api/v3"
      authentication:
        type: bearer
        token: "$secrets.risk_engine_token"
      resources:
        - name: var
          path: "/books/{{book_id}}/var"
          inputParameters:
            - name: book_id
              in: path
          operations:
            - name: get-var
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://jpmorgan.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

# ---------------------------------------------------------------------------
# 20. Wealth Client Portfolio Rebalance (orchestrated)
# ---------------------------------------------------------------------------

Orchestrates daily treasury funding by aggregating cash positions across entities, identifying funding gaps, executing intercompany transfers, and reporting to treasury management.

naftiko: "0.5"
info:
  label: "Daily Treasury Funding Orchestrator"
  description: "Orchestrates daily treasury funding by aggregating cash positions across entities, identifying funding gaps, executing intercompany transfers, and reporting to treasury management."
  tags:
    - treasury
    - funding
    - cash-management
capability:
  exposes:
    - type: mcp
      namespace: treasury-funding
      port: 8080
      tools:
        - name: execute-daily-funding
          description: "Execute daily treasury funding operations."
          inputParameters:
            - name: business_date
              in: body
              type: string
              description: "The business date."
          steps:
            - name: aggregate-positions
              type: call
              call: "treasury.aggregate-cash"
              with:
                date: "{{business_date}}"
            - name: identify-gaps
              type: call
              call: "treasury.identify-funding-gaps"
              with:
                date: "{{business_date}}"
                total_position: "{{aggregate-positions.net_position}}"
            - name: execute-transfers
              type: call
              call: "treasury.execute-interco-transfers"
              with:
                gap_list: "{{identify-gaps.gap_list}}"
            - name: report-status
              type: call
              call: "reporting.create-treasury-report"
              with:
                date: "{{business_date}}"
                net_position: "{{aggregate-positions.net_position}}"
                transfers_executed: "{{execute-transfers.transfer_count}}"
                gaps_resolved: "{{identify-gaps.gap_count}}"
  consumes:
    - type: http
      namespace: treasury
      baseUri: "https://treasury.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.treasury_token"
      resources:
        - name: cash
          path: "/cash/aggregate"
          operations:
            - name: aggregate-cash
              method: GET
        - name: gaps
          path: "/funding/gaps"
          operations:
            - name: identify-funding-gaps
              method: POST
        - name: transfers
          path: "/interco/transfers"
          operations:
            - name: execute-interco-transfers
              method: POST
    - type: http
      namespace: reporting
      baseUri: "https://reporting.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.reporting_token"
      resources:
        - name: reports
          path: "/treasury/daily"
          operations:
            - name: create-treasury-report
              method: POST

Calculates margin requirements for a derivatives portfolio, compares against posted collateral, and if a shortfall exists, generates a margin call notice and notifies the counterparty via SWIFT messaging.

naftiko: "0.5"
info:
  label: "Derivatives Margin Call Orchestrator"
  description: "Calculates margin requirements for a derivatives portfolio, compares against posted collateral, and if a shortfall exists, generates a margin call notice and notifies the counterparty via SWIFT messaging."
  tags:
    - trading
    - derivatives
    - collateral
    - margin
    - swift
capability:
  exposes:
    - type: mcp
      namespace: margin-management
      port: 8080
      tools:
        - name: process-margin-call
          description: "Calculate margin, check collateral, and issue margin call if shortfall exists."
          inputParameters:
            - name: portfolio_id
              in: body
              type: string
              description: "The derivatives portfolio identifier."
            - name: counterparty_lei
              in: body
              type: string
              description: "LEI of the counterparty."
            - name: counterparty_bic
              in: body
              type: string
              description: "SWIFT BIC of the counterparty."
          steps:
            - name: calc-margin
              type: call
              call: "margin-engine.calculate"
              with:
                portfolio_id: "{{portfolio_id}}"
            - name: get-collateral
              type: call
              call: "collateral-mgmt.get-posted"
              with:
                portfolio_id: "{{portfolio_id}}"
                counterparty_lei: "{{counterparty_lei}}"
            - name: issue-call
              type: call
              call: "margin-engine.create-call"
              with:
                portfolio_id: "{{portfolio_id}}"
                counterparty_lei: "{{counterparty_lei}}"
                required_margin: "{{calc-margin.totalMarginRequired}}"
                posted_collateral: "{{get-collateral.totalPosted}}"
            - name: notify-counterparty
              type: call
              call: "swift-messaging.send-mt340"
              with:
                counterparty_bic: "{{counterparty_bic}}"
                margin_call_ref: "{{issue-call.callRef}}"
                amount_due: "{{issue-call.shortfallAmount}}"
                currency: "{{issue-call.currency}}"
                deadline: "{{issue-call.deadline}}"
  consumes:
    - type: http
      namespace: margin-engine
      baseUri: "https://margin-engine.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.margin_engine_token"
      resources:
        - name: calculations
          path: "/portfolios/{{portfolio_id}}/margin"
          inputParameters:
            - name: portfolio_id
              in: path
          operations:
            - name: calculate
              method: POST
        - name: calls
          path: "/margin-calls"
          operations:
            - name: create-call
              method: POST
    - type: http
      namespace: collateral-mgmt
      baseUri: "https://collateral-mgmt.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.collateral_mgmt_token"
      resources:
        - name: posted-collateral
          path: "/portfolios/{{portfolio_id}}/counterparties/{{counterparty_lei}}/collateral"
          inputParameters:
            - name: portfolio_id
              in: path
            - name: counterparty_lei
              in: path
          operations:
            - name: get-posted
              method: GET
    - type: http
      namespace: swift-messaging
      baseUri: "https://swift-messaging.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.swift_messaging_token"
      resources:
        - name: messages
          path: "/messages/mt340"
          operations:
            - name: send-mt340
              method: POST

# ---------------------------------------------------------------------------
# 25. Regulatory Capital Calculation and Filing (orchestrated)
# ---------------------------------------------------------------------------

Retrieves mobile check deposit status for consumer banking, returning deposit amount, hold status, available date, and image quality score.

naftiko: "0.5"
info:
  label: "Digital Banking Mobile Deposit Status"
  description: "Retrieves mobile check deposit status for consumer banking, returning deposit amount, hold status, available date, and image quality score."
  tags:
    - consumer-banking
    - digital
    - deposits
capability:
  exposes:
    - type: mcp
      namespace: mobile-deposits
      port: 8080
      tools:
        - name: get-deposit-status
          description: "Look up a mobile check deposit status."
          inputParameters:
            - name: deposit_id
              in: body
              type: string
              description: "The mobile deposit ID."
          call: "digital-banking.get-deposit"
          with:
            deposit_id: "{{deposit_id}}"
          outputParameters:
            - name: amount
              type: string
              mapping: "$.deposit.amount"
            - name: hold_status
              type: string
              mapping: "$.deposit.holdStatus"
            - name: available_date
              type: string
              mapping: "$.deposit.availableDate"
            - name: image_quality
              type: string
              mapping: "$.deposit.imageQualityScore"
  consumes:
    - type: http
      namespace: digital-banking
      baseUri: "https://digital-banking.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.digital_banking_token"
      resources:
        - name: deposits
          path: "/mobile-deposits/{{deposit_id}}"
          inputParameters:
            - name: deposit_id
              in: path
          operations:
            - name: get-deposit
              method: GET

Orchestrates IPO bookbuilding by setting up the offering in the IB platform, collecting investor indications, running allocation analysis, and distributing allocation results to the syndicate.

naftiko: "0.5"
info:
  label: "Equity IPO Bookbuilding Orchestrator"
  description: "Orchestrates IPO bookbuilding by setting up the offering in the IB platform, collecting investor indications, running allocation analysis, and distributing allocation results to the syndicate."
  tags:
    - investment-banking
    - equities
    - capital-markets
capability:
  exposes:
    - type: mcp
      namespace: ipo-bookbuilding
      port: 8080
      tools:
        - name: manage-bookbuild
          description: "Manage IPO bookbuilding process."
          inputParameters:
            - name: deal_id
              in: body
              type: string
              description: "The IPO deal ID."
            - name: price_range_low
              in: body
              type: string
              description: "Price range low end."
            - name: price_range_high
              in: body
              type: string
              description: "Price range high end."
          steps:
            - name: setup-book
              type: call
              call: "ib-platform.create-book"
              with:
                deal_id: "{{deal_id}}"
                price_low: "{{price_range_low}}"
                price_high: "{{price_range_high}}"
            - name: collect-indications
              type: call
              call: "ib-platform.get-indications"
              with:
                deal_id: "{{deal_id}}"
            - name: run-allocation
              type: call
              call: "allocation-engine.allocate-ipo"
              with:
                deal_id: "{{deal_id}}"
                total_demand: "{{collect-indications.total_demand}}"
                investor_count: "{{collect-indications.investor_count}}"
            - name: distribute-results
              type: call
              call: "messaging.send-allocation-notices"
              with:
                deal_id: "{{deal_id}}"
                allocation_count: "{{run-allocation.allocation_count}}"
  consumes:
    - type: http
      namespace: ib-platform
      baseUri: "https://ib-platform.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ib_platform_token"
      resources:
        - name: books
          path: "/books"
          operations:
            - name: create-book
              method: POST
        - name: indications
          path: "/books/{{deal_id}}/indications"
          inputParameters:
            - name: deal_id
              in: path
          operations:
            - name: get-indications
              method: GET
    - type: http
      namespace: allocation-engine
      baseUri: "https://allocation.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.allocation_token"
      resources:
        - name: ipo
          path: "/ipo/allocate"
          operations:
            - name: allocate-ipo
              method: POST
    - type: http
      namespace: messaging
      baseUri: "https://client-messaging.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.messaging_token"
      resources:
        - name: notices
          path: "/allocation-notices"
          operations:
            - name: send-allocation-notices
              method: POST

Retrieves equity option pricing from the Athena pricing engine, returning theoretical price, delta, gamma, vega, and implied volatility.

naftiko: "0.5"
info:
  label: "Equity Option Pricing Lookup"
  description: "Retrieves equity option pricing from the Athena pricing engine, returning theoretical price, delta, gamma, vega, and implied volatility."
  tags:
    - trading
    - derivatives
    - equities
capability:
  exposes:
    - type: mcp
      namespace: option-pricing
      port: 8080
      tools:
        - name: price-option
          description: "Price an equity option via Athena."
          inputParameters:
            - name: underlying
              in: body
              type: string
              description: "The underlying ticker."
            - name: strike
              in: body
              type: string
              description: "The strike price."
            - name: expiry
              in: body
              type: string
              description: "The expiry date."
            - name: option_type
              in: body
              type: string
              description: "CALL or PUT."
          call: "athena.price-option"
          with:
            underlying: "{{underlying}}"
            strike: "{{strike}}"
            expiry: "{{expiry}}"
            option_type: "{{option_type}}"
          outputParameters:
            - name: theo_price
              type: string
              mapping: "$.pricing.theoreticalPrice"
            - name: delta
              type: string
              mapping: "$.pricing.delta"
            - name: gamma
              type: string
              mapping: "$.pricing.gamma"
            - name: implied_vol
              type: string
              mapping: "$.pricing.impliedVol"
  consumes:
    - type: http
      namespace: athena
      baseUri: "https://athena.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.athena_token"
      resources:
        - name: options
          path: "/pricing/equity-options"
          operations:
            - name: price-option
              method: POST

When a new equity research report is published, fetches the report metadata, identifies subscribed institutional clients in Salesforce, and distributes the report via the client document portal and email notifications.

naftiko: "0.5"
info:
  label: "Equity Research Distribution Pipeline"
  description: "When a new equity research report is published, fetches the report metadata, identifies subscribed institutional clients in Salesforce, and distributes the report via the client document portal and email notifications."
  tags:
    - research
    - equities
    - salesforce
    - distribution
capability:
  exposes:
    - type: mcp
      namespace: research-distribution
      port: 8080
      tools:
        - name: distribute-research
          description: "Fetch research report, identify subscribers, publish to document portal, and send email notifications."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "The research report identifier."
            - name: analyst_name
              in: body
              type: string
              description: "Name of the publishing analyst."
          steps:
            - name: get-report
              type: call
              call: "research-platform.get-report"
              with:
                report_id: "{{report_id}}"
            - name: get-subscribers
              type: call
              call: "salesforce.get-subscribers"
              with:
                coverage_ticker: "{{get-report.ticker}}"
                sector: "{{get-report.sector}}"
            - name: publish-portal
              type: call
              call: "document-portal.publish"
              with:
                report_id: "{{report_id}}"
                title: "{{get-report.title}}"
                ticker: "{{get-report.ticker}}"
                analyst: "{{analyst_name}}"
                subscriber_ids: "{{get-subscribers.clientIds}}"
            - name: send-notifications
              type: call
              call: "email-service.send-bulk"
              with:
                template: "research_alert"
                recipients: "{{get-subscribers.emails}}"
                subject: "New Research: {{get-report.title}} — {{get-report.ticker}}"
                body: "{{analyst_name}} published a new report on {{get-report.ticker}}: {{get-report.title}}. Rating: {{get-report.rating}}. Target price: {{get-report.targetPrice}}. Access at: {{publish-portal.portalUrl}}."
  consumes:
    - type: http
      namespace: research-platform
      baseUri: "https://research-platform.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.research_platform_token"
      resources:
        - name: reports
          path: "/reports/{{report_id}}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-report
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://jpmorgan.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: subscribers
          path: "/query"
          operations:
            - name: get-subscribers
              method: GET
    - type: http
      namespace: document-portal
      baseUri: "https://doc-portal.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.doc_portal_token"
      resources:
        - name: publications
          path: "/publications"
          operations:
            - name: publish
              method: POST
    - type: http
      namespace: email-service
      baseUri: "https://email-service.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_service_token"
      resources:
        - name: bulk-send
          path: "/bulk"
          operations:
            - name: send-bulk
              method: POST

# ---------------------------------------------------------------------------
# 28. Counterparty Credit Limit Monitoring (orchestrated)
# ---------------------------------------------------------------------------

Distributes equity research reports by generating the report from the research platform, performing compliance review, publishing to the client portal, and notifying entitled clients via messaging.

naftiko: "0.5"
info:
  label: "Equity Research Report Distribution Pipeline"
  description: "Distributes equity research reports by generating the report from the research platform, performing compliance review, publishing to the client portal, and notifying entitled clients via messaging."
  tags:
    - research
    - equities
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: research-distribution
      port: 8080
      tools:
        - name: distribute-report
          description: "Distribute an equity research report."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "The research report ID."
            - name: ticker
              in: body
              type: string
              description: "The covered security ticker."
          steps:
            - name: get-report
              type: call
              call: "research-platform.get-report"
              with:
                report_id: "{{report_id}}"
            - name: compliance-review
              type: call
              call: "compliance-system.review-research"
              with:
                report_id: "{{report_id}}"
                ticker: "{{ticker}}"
                rating: "{{get-report.rating}}"
            - name: publish-portal
              type: call
              call: "client-portal.publish-research"
              with:
                report_id: "{{report_id}}"
                clearance_id: "{{compliance-review.clearance_id}}"
            - name: notify-clients
              type: call
              call: "messaging.send-research-alert"
              with:
                ticker: "{{ticker}}"
                report_title: "{{get-report.title}}"
                rating: "{{get-report.rating}}"
  consumes:
    - type: http
      namespace: research-platform
      baseUri: "https://research.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.research_token"
      resources:
        - name: reports
          path: "/reports/{{report_id}}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-report
              method: GET
    - type: http
      namespace: compliance-system
      baseUri: "https://compliance.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.compliance_token"
      resources:
        - name: research-review
          path: "/research/review"
          operations:
            - name: review-research
              method: POST
    - type: http
      namespace: client-portal
      baseUri: "https://client-portal.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.portal_token"
      resources:
        - name: research
          path: "/research/publish"
          operations:
            - name: publish-research
              method: POST
    - type: http
      namespace: messaging
      baseUri: "https://client-messaging.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.messaging_token"
      resources:
        - name: alerts
          path: "/research-alerts"
          operations:
            - name: send-research-alert
              method: POST

Screens a portfolio for ESG compliance by fetching holdings, retrieving ESG scores from the data provider, identifying exclusions against the client's ESG policy, and generating a compliance report in SharePoint.

naftiko: "0.5"
info:
  label: "ESG Portfolio Screening and Reporting"
  description: "Screens a portfolio for ESG compliance by fetching holdings, retrieving ESG scores from the data provider, identifying exclusions against the client's ESG policy, and generating a compliance report in SharePoint."
  tags:
    - wealth-management
    - esg
    - portfolio
    - compliance
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: esg-screening
      port: 8080
      tools:
        - name: screen-esg-compliance
          description: "Fetch holdings, score ESG, identify policy violations, and generate report."
          inputParameters:
            - name: portfolio_id
              in: body
              type: string
              description: "The portfolio identifier."
            - name: esg_policy_id
              in: body
              type: string
              description: "The client ESG policy identifier."
          steps:
            - name: get-holdings
              type: call
              call: "portfolio-svc.get-positions"
              with:
                portfolio_id: "{{portfolio_id}}"
            - name: get-esg-scores
              type: call
              call: "esg-provider.get-scores"
              with:
                isins: "{{get-holdings.isinList}}"
            - name: apply-policy
              type: call
              call: "esg-engine.screen"
              with:
                policy_id: "{{esg_policy_id}}"
                holdings: "{{get-holdings.positions}}"
                scores: "{{get-esg-scores.scores}}"
            - name: generate-report
              type: call
              call: "sharepoint.create-document"
              with:
                site_id: "esg_reporting_site"
                folder_path: "ESG_Reports/{{portfolio_id}}"
                document_name: "ESG_Screening_Report.xlsx"
                violations: "{{apply-policy.violations}}"
                overall_score: "{{apply-policy.portfolioScore}}"
  consumes:
    - type: http
      namespace: portfolio-svc
      baseUri: "https://portfolio-api.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.portfolio_api_token"
      resources:
        - name: positions
          path: "/portfolios/{{portfolio_id}}/positions"
          inputParameters:
            - name: portfolio_id
              in: path
          operations:
            - name: get-positions
              method: GET
    - type: http
      namespace: esg-provider
      baseUri: "https://esg-data.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.esg_provider_token"
      resources:
        - name: scores
          path: "/scores"
          operations:
            - name: get-scores
              method: POST
    - type: http
      namespace: esg-engine
      baseUri: "https://esg-engine.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.esg_engine_token"
      resources:
        - name: screening
          path: "/screen"
          operations:
            - name: screen
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: documents
          path: "/{{site_id}}/drive/root:/{{folder_path}}/{{document_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
            - name: document_name
              in: path
          operations:
            - name: create-document
              method: PUT

# ---------------------------------------------------------------------------
# 48. Incident Response and Business Continuity Activation (orchestrated)
# ---------------------------------------------------------------------------

Retrieves ETF creation/redemption basket details for authorized participant operations, returning basket composition, NAV, premium/discount, and creation unit size.

naftiko: "0.5"
info:
  label: "ETF Authorized Participant Creation"
  description: "Retrieves ETF creation/redemption basket details for authorized participant operations, returning basket composition, NAV, premium/discount, and creation unit size."
  tags:
    - asset-management
    - etf
capability:
  exposes:
    - type: mcp
      namespace: etf-operations
      port: 8080
      tools:
        - name: get-creation-basket
          description: "Retrieve ETF creation basket details."
          inputParameters:
            - name: fund_ticker
              in: body
              type: string
              description: "The ETF ticker symbol."
          call: "etf-platform.get-basket"
          with:
            fund_ticker: "{{fund_ticker}}"
          outputParameters:
            - name: nav
              type: string
              mapping: "$.basket.nav"
            - name: premium_discount
              type: string
              mapping: "$.basket.premiumDiscount"
            - name: creation_unit_size
              type: number
              mapping: "$.basket.creationUnitSize"
            - name: component_count
              type: number
              mapping: "$.basket.componentCount"
  consumes:
    - type: http
      namespace: etf-platform
      baseUri: "https://etf-services.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.etf_platform_token"
      resources:
        - name: baskets
          path: "/funds/{{fund_ticker}}/creation-basket"
          inputParameters:
            - name: fund_ticker
              in: path
          operations:
            - name: get-basket
              method: GET

Queries the FIX gateway for the current execution status of an equities order by ClOrdID. Returns fill quantity, average price, and order state. Used by electronic trading desks to check order lifecycle without accessing the OMS directly.

naftiko: "0.5"
info:
  label: "FIX Order Status Lookup"
  description: "Queries the FIX gateway for the current execution status of an equities order by ClOrdID. Returns fill quantity, average price, and order state. Used by electronic trading desks to check order lifecycle without accessing the OMS directly."
  tags:
    - trading
    - equities
    - fix-gateway
capability:
  exposes:
    - type: mcp
      namespace: equities-trading
      port: 8080
      tools:
        - name: get-order-status
          description: "Look up a FIX equities order by ClOrdID. Returns execution status, filled quantity, average price, and last update timestamp."
          inputParameters:
            - name: cl_ord_id
              in: body
              type: string
              description: "The client order ID assigned at submission."
          call: "fix-gw.get-order"
          with:
            cl_ord_id: "{{cl_ord_id}}"
          outputParameters:
            - name: order_status
              type: string
              mapping: "$.ordStatus"
            - name: filled_qty
              type: number
              mapping: "$.cumQty"
            - name: avg_price
              type: number
              mapping: "$.avgPx"
            - name: last_updated
              type: string
              mapping: "$.transactTime"
  consumes:
    - type: http
      namespace: fix-gw
      baseUri: "https://fix-gateway.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.fix_gateway_token"
      resources:
        - name: orders
          path: "/orders/{{cl_ord_id}}"
          inputParameters:
            - name: cl_ord_id
              in: path
          operations:
            - name: get-order
              method: GET

# ---------------------------------------------------------------------------
# 2. SWIFT Payment Status Lookup (simple)
# ---------------------------------------------------------------------------

Retrieves yield curve data from the market data service, returning spot rates, forward rates, and discount factors for a specified curve and date.

naftiko: "0.5"
info:
  label: "Fixed Income Yield Curve Retrieval"
  description: "Retrieves yield curve data from the market data service, returning spot rates, forward rates, and discount factors for a specified curve and date."
  tags:
    - market-data
    - fixed-income
    - rates
capability:
  exposes:
    - type: mcp
      namespace: yield-curves
      port: 8080
      tools:
        - name: get-yield-curve
          description: "Retrieve yield curve data."
          inputParameters:
            - name: curve_name
              in: body
              type: string
              description: "The curve name (UST, LIBOR, SOFR)."
            - name: date
              in: body
              type: string
              description: "The curve date."
          call: "market-data.get-curve"
          with:
            curve_name: "{{curve_name}}"
            date: "{{date}}"
          outputParameters:
            - name: spot_rates
              type: string
              mapping: "$.curve.spotRates"
            - name: forward_rates
              type: string
              mapping: "$.curve.forwardRates"
            - name: tenors
              type: string
              mapping: "$.curve.tenors"
  consumes:
    - type: http
      namespace: market-data
      baseUri: "https://market-data.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.market_data_token"
      resources:
        - name: curves
          path: "/yield-curves/{{curve_name}}?date={{date}}"
          inputParameters:
            - name: curve_name
              in: path
            - name: date
              in: query
          operations:
            - name: get-curve
              method: GET

When the fraud engine flags a suspicious transaction, enriches with customer profile data, pulls transaction history, creates a fraud case, and temporarily freezes the account pending investigation.

naftiko: "0.5"
info:
  label: "Fraud Investigation Workflow"
  description: "When the fraud engine flags a suspicious transaction, enriches with customer profile data, pulls transaction history, creates a fraud case, and temporarily freezes the account pending investigation."
  tags:
    - fraud
    - compliance
    - case-management
    - payments
capability:
  exposes:
    - type: mcp
      namespace: fraud-investigation
      port: 8080
      tools:
        - name: investigate-fraud-alert
          description: "Enrich fraud alert, pull history, create case, and freeze account."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "The fraud alert identifier."
            - name: account_id
              in: body
              type: string
              description: "The flagged account."
          steps:
            - name: get-fraud-alert
              type: call
              call: "fraud-engine.get-alert"
              with:
                alert_id: "{{alert_id}}"
            - name: get-customer
              type: call
              call: "core-banking.get-customer"
              with:
                account_id: "{{account_id}}"
            - name: get-history
              type: call
              call: "core-banking.get-transaction-history"
              with:
                account_id: "{{account_id}}"
                days: "30"
            - name: create-case
              type: call
              call: "case-mgmt.create-case"
              with:
                title: "Fraud alert: {{get-fraud-alert.alertType}} — {{get-customer.customerName}}"
                description: "Alert {{alert_id}} score: {{get-fraud-alert.score}}. Account: {{account_id}}. Customer since: {{get-customer.accountOpenDate}}. Last 30d volume: {{get-history.transactionCount}} txns, {{get-history.totalAmount}}."
                priority: "critical"
                category: "fraud_investigation"
            - name: freeze-account
              type: call
              call: "core-banking.set-account-hold"
              with:
                account_id: "{{account_id}}"
                hold_reason: "fraud_investigation"
                case_ref: "{{create-case.caseId}}"
  consumes:
    - type: http
      namespace: fraud-engine
      baseUri: "https://fraud-engine.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.fraud_engine_token"
      resources:
        - name: alerts
          path: "/alerts/{{alert_id}}"
          inputParameters:
            - name: alert_id
              in: path
          operations:
            - name: get-alert
              method: GET
    - type: http
      namespace: core-banking
      baseUri: "https://core-banking.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.core_banking_token"
      resources:
        - name: customers
          path: "/accounts/{{account_id}}/customer"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-customer
              method: GET
        - name: transaction-history
          path: "/accounts/{{account_id}}/transactions"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-transaction-history
              method: GET
        - name: holds
          path: "/accounts/{{account_id}}/hold"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: set-account-hold
              method: POST
    - type: http
      namespace: case-mgmt
      baseUri: "https://case-management.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.case_mgmt_token"
      resources:
        - name: cases
          path: "/cases"
          operations:
            - name: create-case
              method: POST

# ---------------------------------------------------------------------------
# 39. Interbank Nostro Reconciliation (orchestrated)
# ---------------------------------------------------------------------------

Retrieves FX forward rates from the market data service, returning outright rate, forward points, and swap points for a given currency pair and tenor.

naftiko: "0.5"
info:
  label: "FX Forward Rate Lookup"
  description: "Retrieves FX forward rates from the market data service, returning outright rate, forward points, and swap points for a given currency pair and tenor."
  tags:
    - fx
    - market-data
    - trading
capability:
  exposes:
    - type: mcp
      namespace: fx-forwards
      port: 8080
      tools:
        - name: get-forward-rate
          description: "Look up FX forward rate for a currency pair."
          inputParameters:
            - name: ccy_pair
              in: body
              type: string
              description: "The currency pair (e.g. EURUSD)."
            - name: tenor
              in: body
              type: string
              description: "The forward tenor (1M, 3M, 6M, 1Y)."
          call: "market-data.get-fx-forward"
          with:
            ccy_pair: "{{ccy_pair}}"
            tenor: "{{tenor}}"
          outputParameters:
            - name: outright_rate
              type: string
              mapping: "$.data.outrightRate"
            - name: forward_points
              type: string
              mapping: "$.data.forwardPoints"
            - name: spot_rate
              type: string
              mapping: "$.data.spotRate"
  consumes:
    - type: http
      namespace: market-data
      baseUri: "https://market-data.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.market_data_token"
      resources:
        - name: fx-forwards
          path: "/fx/forwards?pair={{ccy_pair}}&tenor={{tenor}}"
          inputParameters:
            - name: ccy_pair
              in: query
            - name: tenor
              in: query
          operations:
            - name: get-fx-forward
              method: GET

Fetches the current FX spot rate for a currency pair from the JPMorgan FX pricing engine. Returns mid, bid, and ask rates. Used by treasury, trading, and operations for currency conversion and pricing.

naftiko: "0.5"
info:
  label: "FX Spot Rate Retrieval"
  description: "Fetches the current FX spot rate for a currency pair from the JPMorgan FX pricing engine. Returns mid, bid, and ask rates. Used by treasury, trading, and operations for currency conversion and pricing."
  tags:
    - trading
    - fx
    - treasury
capability:
  exposes:
    - type: mcp
      namespace: fx-pricing
      port: 8080
      tools:
        - name: get-fx-spot
          description: "Retrieve FX spot rate for a currency pair. Returns mid, bid, and ask rates with timestamp."
          inputParameters:
            - name: currency_pair
              in: body
              type: string
              description: "The currency pair in ISO format (e.g., EURUSD)."
          call: "fx-engine.get-spot"
          with:
            currency_pair: "{{currency_pair}}"
          outputParameters:
            - name: mid_rate
              type: number
              mapping: "$.rate.mid"
            - name: bid_rate
              type: number
              mapping: "$.rate.bid"
            - name: ask_rate
              type: number
              mapping: "$.rate.ask"
            - name: timestamp
              type: string
              mapping: "$.rate.timestamp"
  consumes:
    - type: http
      namespace: fx-engine
      baseUri: "https://fx-pricing.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.fx_engine_token"
      resources:
        - name: spot-rates
          path: "/spot/{{currency_pair}}"
          inputParameters:
            - name: currency_pair
              in: path
          operations:
            - name: get-spot
              method: GET

# ---------------------------------------------------------------------------
# 13. Custody Account Balance Lookup (simple)
# ---------------------------------------------------------------------------

Handles an FX spot trade from pricing through execution: fetches the live spot rate, submits the trade to the FX execution engine, books in the OMS, and confirms to the client via messaging.

naftiko: "0.5"
info:
  label: "FX Trade Lifecycle Orchestrator"
  description: "Handles an FX spot trade from pricing through execution: fetches the live spot rate, submits the trade to the FX execution engine, books in the OMS, and confirms to the client via messaging."
  tags:
    - trading
    - fx
    - oms
    - confirmation
capability:
  exposes:
    - type: mcp
      namespace: fx-trade-lifecycle
      port: 8080
      tools:
        - name: execute-fx-trade
          description: "Price, execute, book, and confirm an FX spot trade."
          inputParameters:
            - name: currency_pair
              in: body
              type: string
              description: "Currency pair (e.g., EURUSD)."
            - name: side
              in: body
              type: string
              description: "BUY or SELL the base currency."
            - name: notional
              in: body
              type: number
              description: "Notional amount in base currency."
            - name: client_id
              in: body
              type: string
              description: "Client account identifier."
          steps:
            - name: get-rate
              type: call
              call: "fx-engine.get-spot"
              with:
                currency_pair: "{{currency_pair}}"
            - name: execute-trade
              type: call
              call: "fx-execution.submit"
              with:
                currency_pair: "{{currency_pair}}"
                side: "{{side}}"
                notional: "{{notional}}"
                rate: "{{get-rate.mid}}"
            - name: book-trade
              type: call
              call: "oms.book-trade"
              with:
                trade_ref: "{{execute-trade.tradeRef}}"
                client_id: "{{client_id}}"
                currency_pair: "{{currency_pair}}"
                notional: "{{notional}}"
                rate: "{{execute-trade.executedRate}}"
            - name: confirm-client
              type: call
              call: "messaging.send-confirmation"
              with:
                client_id: "{{client_id}}"
                message: "FX trade confirmed: {{side}} {{notional}} {{currency_pair}} at {{execute-trade.executedRate}}. Trade ref: {{execute-trade.tradeRef}}. Value date: {{execute-trade.valueDate}}."
  consumes:
    - type: http
      namespace: fx-engine
      baseUri: "https://fx-pricing.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.fx_engine_token"
      resources:
        - name: spot-rates
          path: "/spot/{{currency_pair}}"
          inputParameters:
            - name: currency_pair
              in: path
          operations:
            - name: get-spot
              method: GET
    - type: http
      namespace: fx-execution
      baseUri: "https://fx-execution.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.fx_execution_token"
      resources:
        - name: trades
          path: "/trades"
          operations:
            - name: submit
              method: POST
    - type: http
      namespace: oms
      baseUri: "https://oms.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.oms_token"
      resources:
        - name: bookings
          path: "/bookings"
          operations:
            - name: book-trade
              method: POST
    - type: http
      namespace: messaging
      baseUri: "https://client-messaging.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.messaging_token"
      resources:
        - name: confirmations
          path: "/confirmations"
          operations:
            - name: send-confirmation
              method: POST

# ---------------------------------------------------------------------------
# 23. Commercial Loan Origination Pipeline (orchestrated)
# ---------------------------------------------------------------------------

Retrieves global payment routing status from the payment hub, returning selected route, estimated arrival time, correspondent bank chain, and total fees.

naftiko: "0.5"
info:
  label: "Global Payments Routing Status"
  description: "Retrieves global payment routing status from the payment hub, returning selected route, estimated arrival time, correspondent bank chain, and total fees."
  tags:
    - payments
    - global
capability:
  exposes:
    - type: mcp
      namespace: payment-routing
      port: 8080
      tools:
        - name: get-routing-status
          description: "Retrieve payment routing status."
          inputParameters:
            - name: payment_id
              in: body
              type: string
              description: "The payment ID."
          call: "payment-hub.get-route"
          with:
            payment_id: "{{payment_id}}"
          outputParameters:
            - name: route
              type: string
              mapping: "$.routing.selectedRoute"
            - name: eta
              type: string
              mapping: "$.routing.estimatedArrival"
            - name: correspondent_chain
              type: string
              mapping: "$.routing.correspondentBanks"
            - name: total_fees
              type: string
              mapping: "$.routing.totalFees"
  consumes:
    - type: http
      namespace: payment-hub
      baseUri: "https://payment-hub.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.payment_hub_token"
      resources:
        - name: routing
          path: "/payments/{{payment_id}}/routing"
          inputParameters:
            - name: payment_id
              in: path
          operations:
            - name: get-route
              method: GET

On a critical technology incident, creates a P1 incident in ServiceNow, activates the business continuity plan in the BCM system, sends mass notifications to the crisis team via Microsoft Teams, and pages the on-call SRE via PagerDuty.

naftiko: "0.5"
info:
  label: "Incident Response and Business Continuity Activation"
  description: "On a critical technology incident, creates a P1 incident in ServiceNow, activates the business continuity plan in the BCM system, sends mass notifications to the crisis team via Microsoft Teams, and pages the on-call SRE via PagerDuty."
  tags:
    - technology
    - incident-response
    - servicenow
    - microsoft-teams
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: incident-response
      port: 8080
      tools:
        - name: activate-incident-response
          description: "Create P1 incident, activate BCP, mass notify crisis team, and page on-call SRE."
          inputParameters:
            - name: incident_summary
              in: body
              type: string
              description: "Brief summary of the incident."
            - name: affected_service
              in: body
              type: string
              description: "Name of the affected service."
            - name: severity
              in: body
              type: string
              description: "Severity level (P1, P2)."
            - name: crisis_team_channel
              in: body
              type: string
              description: "Microsoft Teams channel ID for the crisis team."
            - name: pagerduty_service_id
              in: body
              type: string
              description: "PagerDuty service ID for the affected system."
          steps:
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "{{severity}}: {{incident_summary}}"
                category: "technology_incident"
                assigned_group: "Global_Technology"
                description: "Affected service: {{affected_service}}. Severity: {{severity}}. Reported at current timestamp."
                urgency: "1"
            - name: activate-bcp
              type: call
              call: "bcm-system.activate"
              with:
                service: "{{affected_service}}"
                severity: "{{severity}}"
                incident_ref: "{{create-incident.number}}"
            - name: notify-crisis-team
              type: call
              call: "msteams.post-channel"
              with:
                channel_id: "{{crisis_team_channel}}"
                text: "INCIDENT ALERT {{severity}}: {{incident_summary}}. Service: {{affected_service}}. SNOW: {{create-incident.number}}. BCP: {{activate-bcp.planRef}}. War room assembling."
            - name: page-oncall
              type: call
              call: "pagerduty.create-incident"
              with:
                service_id: "{{pagerduty_service_id}}"
                title: "{{severity}} — {{incident_summary}}"
                urgency: "high"
                details: "ServiceNow: {{create-incident.number}}. BCP activated: {{activate-bcp.planRef}}."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://jpmorgan.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: bcm-system
      baseUri: "https://bcm-system.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.bcm_system_token"
      resources:
        - name: activations
          path: "/activations"
          operations:
            - name: activate
              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/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel
              method: POST
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST

# ---------------------------------------------------------------------------
# 49. Wealth Client Tax-Loss Harvesting (orchestrated)
# ---------------------------------------------------------------------------

Reconciles nostro account balances by fetching the internal ledger balance, retrieving the correspondent bank statement via SWIFT, identifying breaks, and creating ServiceNow tasks for unmatched items.

naftiko: "0.5"
info:
  label: "Interbank Nostro Reconciliation"
  description: "Reconciles nostro account balances by fetching the internal ledger balance, retrieving the correspondent bank statement via SWIFT, identifying breaks, and creating ServiceNow tasks for unmatched items."
  tags:
    - treasury
    - reconciliation
    - nostro
    - swift
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: nostro-recon
      port: 8080
      tools:
        - name: reconcile-nostro
          description: "Compare internal ledger to correspondent statement and escalate breaks."
          inputParameters:
            - name: nostro_account_id
              in: body
              type: string
              description: "The nostro account identifier."
            - name: correspondent_bic
              in: body
              type: string
              description: "SWIFT BIC of the correspondent bank."
            - name: value_date
              in: body
              type: string
              description: "Value date in YYYY-MM-DD format."
          steps:
            - name: get-ledger-balance
              type: call
              call: "core-banking.get-balance"
              with:
                account_id: "{{nostro_account_id}}"
                value_date: "{{value_date}}"
            - name: get-statement
              type: call
              call: "swift-messaging.get-mt950"
              with:
                correspondent_bic: "{{correspondent_bic}}"
                account_id: "{{nostro_account_id}}"
                value_date: "{{value_date}}"
            - name: identify-breaks
              type: call
              call: "recon-engine.match"
              with:
                ledger_balance: "{{get-ledger-balance.balance}}"
                statement_balance: "{{get-statement.closingBalance}}"
                ledger_entries: "{{get-ledger-balance.entries}}"
                statement_entries: "{{get-statement.entries}}"
            - name: create-break-tasks
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Nostro recon breaks: {{nostro_account_id}} at {{correspondent_bic}} for {{value_date}}"
                description: "{{identify-breaks.breakCount}} unmatched items. Ledger balance: {{get-ledger-balance.balance}}. Statement balance: {{get-statement.closingBalance}}. Net difference: {{identify-breaks.netDifference}}."
                assigned_group: "Nostro_Recon"
                category: "reconciliation"
  consumes:
    - type: http
      namespace: core-banking
      baseUri: "https://core-banking.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.core_banking_token"
      resources:
        - name: balances
          path: "/accounts/{{account_id}}/balance"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-balance
              method: GET
    - type: http
      namespace: swift-messaging
      baseUri: "https://swift-messaging.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.swift_messaging_token"
      resources:
        - name: statements
          path: "/statements/mt950"
          operations:
            - name: get-mt950
              method: GET
    - type: http
      namespace: recon-engine
      baseUri: "https://recon-engine.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.recon_engine_token"
      resources:
        - name: matching
          path: "/match"
          operations:
            - name: match
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://jpmorgan.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/task"
          operations:
            - name: create-task
              method: POST

# ---------------------------------------------------------------------------
# 40. Commercial Card Program Enrollment (orchestrated)
# ---------------------------------------------------------------------------

Books a new interest rate swap in the derivatives platform, prices it via Athena, registers the trade with the DTCC trade repository, and sends an electronic confirmation to the counterparty.

naftiko: "0.5"
info:
  label: "Interest Rate Swap Booking and Confirmation"
  description: "Books a new interest rate swap in the derivatives platform, prices it via Athena, registers the trade with the DTCC trade repository, and sends an electronic confirmation to the counterparty."
  tags:
    - trading
    - derivatives
    - athena
    - dtcc
    - confirmation
capability:
  exposes:
    - type: mcp
      namespace: irs-booking
      port: 8080
      tools:
        - name: book-irs
          description: "Book an IRS, price in Athena, report to DTCC, and send electronic confirmation."
          inputParameters:
            - name: counterparty_lei
              in: body
              type: string
              description: "LEI of the swap counterparty."
            - name: notional
              in: body
              type: number
              description: "Notional amount."
            - name: currency
              in: body
              type: string
              description: "Notional currency."
            - name: fixed_rate
              in: body
              type: number
              description: "Fixed leg rate."
            - name: tenor
              in: body
              type: string
              description: "Swap tenor (e.g., 5Y, 10Y)."
            - name: client_id
              in: body
              type: string
              description: "Client account identifier."
          steps:
            - name: book-trade
              type: call
              call: "derivatives-platform.book-irs"
              with:
                counterparty_lei: "{{counterparty_lei}}"
                notional: "{{notional}}"
                currency: "{{currency}}"
                fixed_rate: "{{fixed_rate}}"
                tenor: "{{tenor}}"
            - name: price-trade
              type: call
              call: "athena.price-trade"
              with:
                trade_id: "{{book-trade.tradeId}}"
            - name: report-dtcc
              type: call
              call: "dtcc-gateway.report-trade"
              with:
                trade_id: "{{book-trade.tradeId}}"
                product_type: "IRS"
                notional: "{{notional}}"
                currency: "{{currency}}"
                counterparty_lei: "{{counterparty_lei}}"
            - name: send-confirmation
              type: call
              call: "messaging.send-confirmation"
              with:
                client_id: "{{client_id}}"
                message: "IRS booked: {{notional}} {{currency}} {{tenor}} at {{fixed_rate}}% fixed. MTM: {{price-trade.mtm}}. Trade ref: {{book-trade.tradeId}}. DTCC UTI: {{report-dtcc.uti}}."
  consumes:
    - type: http
      namespace: derivatives-platform
      baseUri: "https://derivatives-platform.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.derivatives_platform_token"
      resources:
        - name: irs
          path: "/irs"
          operations:
            - name: book-irs
              method: POST
    - type: http
      namespace: athena
      baseUri: "https://athena.jpmorgan.com/api/v3"
      authentication:
        type: bearer
        token: "$secrets.athena_token"
      resources:
        - name: pricing
          path: "/trades/{{trade_id}}/price"
          inputParameters:
            - name: trade_id
              in: path
          operations:
            - name: price-trade
              method: POST
    - type: http
      namespace: dtcc-gateway
      baseUri: "https://dtcc-gateway.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.dtcc_gateway_token"
      resources:
        - name: trade-reports
          path: "/reports"
          operations:
            - name: report-trade
              method: POST
    - type: http
      namespace: messaging
      baseUri: "https://client-messaging.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.messaging_token"
      resources:
        - name: confirmations
          path: "/confirmations"
          operations:
            - name: send-confirmation
              method: POST

# ---------------------------------------------------------------------------
# 47. ESG Portfolio Screening and Reporting (orchestrated)
# ---------------------------------------------------------------------------

Synchronizes M&A deal status from the deal management system to Salesforce, updates the pitch book repository in SharePoint, and notifies the coverage banker via Microsoft Teams when a deal stage changes.

naftiko: "0.5"
info:
  label: "Investment Banking Deal Pipeline Tracker"
  description: "Synchronizes M&A deal status from the deal management system to Salesforce, updates the pitch book repository in SharePoint, and notifies the coverage banker via Microsoft Teams when a deal stage changes."
  tags:
    - investment-banking
    - deals
    - salesforce
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: ib-deal-pipeline
      port: 8080
      tools:
        - name: sync-deal-status
          description: "Update CRM, refresh pitch book repository, and notify banker on deal stage change."
          inputParameters:
            - name: deal_id
              in: body
              type: string
              description: "The M&A deal identifier."
            - name: new_stage
              in: body
              type: string
              description: "The new deal stage."
            - name: banker_email
              in: body
              type: string
              description: "Email of the coverage banker."
          steps:
            - name: get-deal
              type: call
              call: "deal-mgmt.get-deal"
              with:
                deal_id: "{{deal_id}}"
            - name: update-crm
              type: call
              call: "salesforce.update-opportunity"
              with:
                opportunity_id: "{{get-deal.crmOpportunityId}}"
                stage: "{{new_stage}}"
            - name: update-pitchbook
              type: call
              call: "sharepoint.update-metadata"
              with:
                site_id: "ib_deals_site"
                folder_path: "Deals/{{get-deal.dealName}}"
                metadata_stage: "{{new_stage}}"
            - name: notify-banker
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{banker_email}}"
                text: "Deal update: {{get-deal.dealName}} moved to {{new_stage}}. Target: {{get-deal.targetName}}. Deal size: {{get-deal.dealSize}}. CRM updated, pitch book refreshed."
  consumes:
    - type: http
      namespace: deal-mgmt
      baseUri: "https://deal-management.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.deal_mgmt_token"
      resources:
        - name: deals
          path: "/deals/{{deal_id}}"
          inputParameters:
            - name: deal_id
              in: path
          operations:
            - name: get-deal
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://jpmorgan.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: update-opportunity
              method: PATCH
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: update-metadata
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

# ---------------------------------------------------------------------------
# 35. Algorithmic Trading Strategy Deployment (orchestrated)
# ---------------------------------------------------------------------------

Validates a payment message migration from MT to ISO 20022 format by parsing the legacy MT message, converting via the translation engine, comparing fields, and logging the validation result.

naftiko: "0.5"
info:
  label: "ISO 20022 Payment Migration Validator"
  description: "Validates a payment message migration from MT to ISO 20022 format by parsing the legacy MT message, converting via the translation engine, comparing fields, and logging the validation result."
  tags:
    - payments
    - swift
    - iso20022
    - technology
capability:
  exposes:
    - type: mcp
      namespace: iso20022-migration
      port: 8080
      tools:
        - name: validate-migration
          description: "Parse MT message, translate to ISO 20022, compare fields, and log validation."
          inputParameters:
            - name: mt_message_ref
              in: body
              type: string
              description: "Reference ID of the legacy MT message."
            - name: message_type
              in: body
              type: string
              description: "MT message type (e.g., MT103, MT202)."
          steps:
            - name: get-mt-message
              type: call
              call: "swift-messaging.get-message"
              with:
                message_ref: "{{mt_message_ref}}"
            - name: translate
              type: call
              call: "iso20022-engine.translate"
              with:
                mt_content: "{{get-mt-message.content}}"
                message_type: "{{message_type}}"
            - name: compare-fields
              type: call
              call: "iso20022-engine.compare"
              with:
                mt_parsed: "{{get-mt-message.parsedFields}}"
                mx_parsed: "{{translate.parsedFields}}"
            - name: log-result
              type: call
              call: "migration-tracker.log"
              with:
                mt_message_ref: "{{mt_message_ref}}"
                message_type: "{{message_type}}"
                match_pct: "{{compare-fields.matchPercentage}}"
                mismatched_fields: "{{compare-fields.mismatchedFields}}"
                status: "{{compare-fields.validationStatus}}"
  consumes:
    - type: http
      namespace: swift-messaging
      baseUri: "https://swift-messaging.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.swift_messaging_token"
      resources:
        - name: messages
          path: "/messages/{{message_ref}}"
          inputParameters:
            - name: message_ref
              in: path
          operations:
            - name: get-message
              method: GET
    - type: http
      namespace: iso20022-engine
      baseUri: "https://iso20022-engine.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.iso20022_engine_token"
      resources:
        - name: translations
          path: "/translate"
          operations:
            - name: translate
              method: POST
        - name: comparisons
          path: "/compare"
          operations:
            - name: compare
              method: POST
    - type: http
      namespace: migration-tracker
      baseUri: "https://migration-tracker.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.migration_tracker_token"
      resources:
        - name: logs
          path: "/logs"
          operations:
            - name: log
              method: POST

# ---------------------------------------------------------------------------
# 43. Securities Lending Availability Check and Locate (orchestrated)
# ---------------------------------------------------------------------------

Fetches the current Know Your Customer record for a client entity from the KYC platform. Returns verification status, risk tier, and document expiry. Used by compliance analysts during periodic reviews.

naftiko: "0.5"
info:
  label: "KYC Document Retrieval"
  description: "Fetches the current Know Your Customer record for a client entity from the KYC platform. Returns verification status, risk tier, and document expiry. Used by compliance analysts during periodic reviews."
  tags:
    - compliance
    - kyc
    - onboarding
capability:
  exposes:
    - type: mcp
      namespace: compliance-kyc
      port: 8080
      tools:
        - name: get-kyc-record
          description: "Retrieve a KYC record for a client entity by entity ID. Returns verification status, risk tier, and document expiry date."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The internal entity identifier for the client."
          call: "kyc-platform.get-entity"
          with:
            entity_id: "{{entity_id}}"
          outputParameters:
            - name: verification_status
              type: string
              mapping: "$.entity.verificationStatus"
            - name: risk_tier
              type: string
              mapping: "$.entity.riskTier"
            - name: document_expiry
              type: string
              mapping: "$.entity.documentExpiryDate"
  consumes:
    - type: http
      namespace: kyc-platform
      baseUri: "https://kyc-platform.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.kyc_platform_token"
      resources:
        - name: entities
          path: "/entities/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-entity
              method: GET

# ---------------------------------------------------------------------------
# 6. Portfolio Position Lookup (simple)
# ---------------------------------------------------------------------------

Calculates daily LCR by fetching high-quality liquid assets and net cash outflows from the treasury system, computes the ratio, and alerts the ALM team via Microsoft Teams if it approaches the regulatory minimum.

naftiko: "0.5"
info:
  label: "Liquidity Coverage Ratio Monitoring"
  description: "Calculates daily LCR by fetching high-quality liquid assets and net cash outflows from the treasury system, computes the ratio, and alerts the ALM team via Microsoft Teams if it approaches the regulatory minimum."
  tags:
    - treasury
    - liquidity
    - risk
    - regulatory
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: liquidity-monitoring
      port: 8080
      tools:
        - name: monitor-lcr
          description: "Calculate LCR from HQLA and cash outflows, and alert if below threshold."
          inputParameters:
            - name: reporting_date
              in: body
              type: string
              description: "Reporting date in YYYY-MM-DD format."
            - name: alm_team_email
              in: body
              type: string
              description: "Email of the ALM team lead."
          steps:
            - name: get-hqla
              type: call
              call: "treasury-system.get-hqla"
              with:
                reporting_date: "{{reporting_date}}"
            - name: get-outflows
              type: call
              call: "treasury-system.get-net-outflows"
              with:
                reporting_date: "{{reporting_date}}"
            - name: calc-lcr
              type: call
              call: "liquidity-engine.calculate-lcr"
              with:
                hqla: "{{get-hqla.totalHQLA}}"
                net_outflows: "{{get-outflows.totalNetOutflows}}"
            - name: alert-alm
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{alm_team_email}}"
                text: "Daily LCR for {{reporting_date}}: {{calc-lcr.lcrRatio}}%. HQLA: {{get-hqla.totalHQLA}}. Net outflows: {{get-outflows.totalNetOutflows}}. Status: {{calc-lcr.status}}."
  consumes:
    - type: http
      namespace: treasury-system
      baseUri: "https://treasury-system.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.treasury_system_token"
      resources:
        - name: hqla
          path: "/hqla/{{reporting_date}}"
          inputParameters:
            - name: reporting_date
              in: path
          operations:
            - name: get-hqla
              method: GET
        - name: outflows
          path: "/net-outflows/{{reporting_date}}"
          inputParameters:
            - name: reporting_date
              in: path
          operations:
            - name: get-net-outflows
              method: GET
    - type: http
      namespace: liquidity-engine
      baseUri: "https://liquidity-engine.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.liquidity_engine_token"
      resources:
        - name: lcr
          path: "/lcr/calculate"
          operations:
            - name: calculate-lcr
              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

# ---------------------------------------------------------------------------
# 34. Investment Banking Deal Pipeline Tracker (orchestrated)
# ---------------------------------------------------------------------------

Retrieves details of a commercial lending facility by facility ID from the loan origination system. Returns commitment amount, drawn balance, maturity date, and pricing. Used by commercial bankers and credit officers.

naftiko: "0.5"
info:
  label: "Loan Facility Lookup"
  description: "Retrieves details of a commercial lending facility by facility ID from the loan origination system. Returns commitment amount, drawn balance, maturity date, and pricing. Used by commercial bankers and credit officers."
  tags:
    - commercial-banking
    - lending
    - loans
capability:
  exposes:
    - type: mcp
      namespace: commercial-lending
      port: 8080
      tools:
        - name: get-loan-facility
          description: "Look up a commercial loan facility by facility ID. Returns commitment amount, drawn balance, maturity date, and current rate."
          inputParameters:
            - name: facility_id
              in: body
              type: string
              description: "The loan facility identifier."
          call: "loan-system.get-facility"
          with:
            facility_id: "{{facility_id}}"
          outputParameters:
            - name: commitment_amount
              type: number
              mapping: "$.facility.commitmentAmount"
            - name: drawn_balance
              type: number
              mapping: "$.facility.drawnBalance"
            - name: maturity_date
              type: string
              mapping: "$.facility.maturityDate"
            - name: current_rate
              type: number
              mapping: "$.facility.currentRate"
  consumes:
    - type: http
      namespace: loan-system
      baseUri: "https://loan-origination.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.loan_system_token"
      resources:
        - name: facilities
          path: "/facilities/{{facility_id}}"
          inputParameters:
            - name: facility_id
              in: path
          operations:
            - name: get-facility
              method: GET

# ---------------------------------------------------------------------------
# 9. Sanctions Screening Check (simple)
# ---------------------------------------------------------------------------

Fetches a real-time quote for a given instrument from the Bloomberg B-PIPE market data feed. Returns bid, ask, last price, and volume. Used by traders, portfolio managers, and risk analysts.

naftiko: "0.5"
info:
  label: "Market Data Quote Retrieval"
  description: "Fetches a real-time quote for a given instrument from the Bloomberg B-PIPE market data feed. Returns bid, ask, last price, and volume. Used by traders, portfolio managers, and risk analysts."
  tags:
    - trading
    - market-data
    - bloomberg
capability:
  exposes:
    - type: mcp
      namespace: market-data
      port: 8080
      tools:
        - name: get-quote
          description: "Retrieve a real-time quote from Bloomberg B-PIPE for a given ticker symbol. Returns bid, ask, last trade price, and volume."
          inputParameters:
            - name: ticker
              in: body
              type: string
              description: "The Bloomberg ticker symbol (e.g., AAPL US Equity)."
          call: "bloomberg.get-quote"
          with:
            ticker: "{{ticker}}"
          outputParameters:
            - name: bid
              type: number
              mapping: "$.data.bid"
            - name: ask
              type: number
              mapping: "$.data.ask"
            - name: last_price
              type: number
              mapping: "$.data.lastPrice"
            - name: volume
              type: number
              mapping: "$.data.volume"
  consumes:
    - type: http
      namespace: bloomberg
      baseUri: "https://bpipe-api.bloomberg.com/eap/catalogs/bbg/snapshots"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_bpipe_token"
      resources:
        - name: quotes
          path: "/{{ticker}}"
          inputParameters:
            - name: ticker
              in: path
          operations:
            - name: get-quote
              method: GET

# ---------------------------------------------------------------------------
# 4. Credit Risk Score Retrieval (simple)
# ---------------------------------------------------------------------------

Retrieves Value-at-Risk calculation results from the risk engine, returning 1-day VaR, 10-day VaR, and stressed VaR by trading desk.

naftiko: "0.5"
info:
  label: "Market Risk VaR Calculation"
  description: "Retrieves Value-at-Risk calculation results from the risk engine, returning 1-day VaR, 10-day VaR, and stressed VaR by trading desk."
  tags:
    - risk
    - market-risk
capability:
  exposes:
    - type: mcp
      namespace: market-risk-var
      port: 8080
      tools:
        - name: get-var
          description: "Retrieve VaR calculation for a trading desk."
          inputParameters:
            - name: desk_id
              in: body
              type: string
              description: "The trading desk ID."
            - name: date
              in: body
              type: string
              description: "The calculation date."
          call: "risk-engine.get-var"
          with:
            desk_id: "{{desk_id}}"
            date: "{{date}}"
          outputParameters:
            - name: var_1d
              type: string
              mapping: "$.var.oneDay99"
            - name: var_10d
              type: string
              mapping: "$.var.tenDay99"
            - name: stressed_var
              type: string
              mapping: "$.var.stressedVaR"
  consumes:
    - type: http
      namespace: risk-engine
      baseUri: "https://risk-engine.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.risk_engine_token"
      resources:
        - name: var
          path: "/var/desks/{{desk_id}}?date={{date}}"
          inputParameters:
            - name: desk_id
              in: path
            - name: date
              in: query
          operations:
            - name: get-var
              method: GET

Retrieves merchant payment processing transaction details, returning transaction amount, card type, authorization code, and settlement status.

naftiko: "0.5"
info:
  label: "Merchant Services Transaction Lookup"
  description: "Retrieves merchant payment processing transaction details, returning transaction amount, card type, authorization code, and settlement status."
  tags:
    - payments
    - merchant-services
capability:
  exposes:
    - type: mcp
      namespace: merchant-transactions
      port: 8080
      tools:
        - name: get-merchant-tx
          description: "Look up a merchant services transaction."
          inputParameters:
            - name: transaction_id
              in: body
              type: string
              description: "The transaction ID."
          call: "merchant.get-transaction"
          with:
            transaction_id: "{{transaction_id}}"
          outputParameters:
            - name: amount
              type: string
              mapping: "$.transaction.amount"
            - name: card_type
              type: string
              mapping: "$.transaction.cardType"
            - name: auth_code
              type: string
              mapping: "$.transaction.authorizationCode"
            - name: settlement_status
              type: string
              mapping: "$.transaction.settlementStatus"
  consumes:
    - type: http
      namespace: merchant
      baseUri: "https://merchant-services.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.merchant_token"
      resources:
        - name: transactions
          path: "/transactions/{{transaction_id}}"
          inputParameters:
            - name: transaction_id
              in: path
          operations:
            - name: get-transaction
              method: GET

Orchestrates model validation governance by retrieving model performance metrics, running validation tests, generating the validation report, and submitting for model risk committee approval.

naftiko: "0.5"
info:
  label: "Model Validation Governance Pipeline"
  description: "Orchestrates model validation governance by retrieving model performance metrics, running validation tests, generating the validation report, and submitting for model risk committee approval."
  tags:
    - model-risk
    - governance
    - machine-learning
capability:
  exposes:
    - type: mcp
      namespace: model-governance
      port: 8080
      tools:
        - name: validate-model
          description: "Execute model validation governance workflow."
          inputParameters:
            - name: model_id
              in: body
              type: string
              description: "The model ID."
            - name: validation_type
              in: body
              type: string
              description: "Validation type (initial, annual, trigger)."
          steps:
            - name: get-performance
              type: call
              call: "model-platform.get-metrics"
              with:
                model_id: "{{model_id}}"
            - name: run-validation
              type: call
              call: "model-platform.run-tests"
              with:
                model_id: "{{model_id}}"
                validation_type: "{{validation_type}}"
            - name: generate-report
              type: call
              call: "model-platform.create-validation-report"
              with:
                model_id: "{{model_id}}"
                test_results: "{{run-validation.results_id}}"
                performance_metrics: "{{get-performance.metrics_id}}"
            - name: submit-approval
              type: call
              call: "governance-system.submit-for-approval"
              with:
                model_id: "{{model_id}}"
                report_id: "{{generate-report.report_id}}"
                committee: "Model_Risk_Committee"
  consumes:
    - type: http
      namespace: model-platform
      baseUri: "https://model-risk.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.model_platform_token"
      resources:
        - name: metrics
          path: "/models/{{model_id}}/metrics"
          inputParameters:
            - name: model_id
              in: path
          operations:
            - name: get-metrics
              method: GET
        - name: tests
          path: "/models/{{model_id}}/validate"
          inputParameters:
            - name: model_id
              in: path
          operations:
            - name: run-tests
              method: POST
        - name: reports
          path: "/reports/create"
          operations:
            - name: create-validation-report
              method: POST
    - type: http
      namespace: governance-system
      baseUri: "https://governance.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.governance_token"
      resources:
        - name: approvals
          path: "/approvals/submit"
          operations:
            - name: submit-for-approval
              method: POST

Retrieves mutual fund order details from the fund platform, returning order type, amount, NAV applied, and settlement status for asset management operations.

naftiko: "0.5"
info:
  label: "Mutual Fund Order Lookup"
  description: "Retrieves mutual fund order details from the fund platform, returning order type, amount, NAV applied, and settlement status for asset management operations."
  tags:
    - asset-management
    - mutual-funds
capability:
  exposes:
    - type: mcp
      namespace: fund-orders
      port: 8080
      tools:
        - name: get-fund-order
          description: "Look up a mutual fund order."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The fund order ID."
          call: "fund-platform.get-order"
          with:
            order_id: "{{order_id}}"
          outputParameters:
            - name: order_type
              type: string
              mapping: "$.order.type"
            - name: amount
              type: string
              mapping: "$.order.amount"
            - name: nav_applied
              type: string
              mapping: "$.order.navApplied"
            - name: settlement_status
              type: string
              mapping: "$.order.settlementStatus"
  consumes:
    - type: http
      namespace: fund-platform
      baseUri: "https://fund-services.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.fund_platform_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET

Retrieves blockchain transaction details from JPMorgan's Onyx platform, returning transaction hash, settlement status, and counterparty for JPM Coin payments.

naftiko: "0.5"
info:
  label: "Onyx Blockchain Transaction Lookup"
  description: "Retrieves blockchain transaction details from JPMorgan's Onyx platform, returning transaction hash, settlement status, and counterparty for JPM Coin payments."
  tags:
    - blockchain
    - payments
    - onyx
capability:
  exposes:
    - type: mcp
      namespace: blockchain-payments
      port: 8080
      tools:
        - name: get-blockchain-tx
          description: "Look up an Onyx blockchain transaction."
          inputParameters:
            - name: tx_hash
              in: body
              type: string
              description: "The blockchain transaction hash."
          call: "onyx.get-transaction"
          with:
            tx_hash: "{{tx_hash}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.transaction.status"
            - name: amount
              type: string
              mapping: "$.transaction.amount"
            - name: counterparty
              type: string
              mapping: "$.transaction.counterparty"
            - name: settled_at
              type: string
              mapping: "$.transaction.settledAt"
  consumes:
    - type: http
      namespace: onyx
      baseUri: "https://onyx.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.onyx_token"
      resources:
        - name: transactions
          path: "/transactions/{{tx_hash}}"
          inputParameters:
            - name: tx_hash
              in: path
          operations:
            - name: get-transaction
              method: GET

Retrieves operational risk incident details from the risk management system, returning incident type, financial impact, root cause, and remediation status.

naftiko: "0.5"
info:
  label: "Operational Risk Incident Lookup"
  description: "Retrieves operational risk incident details from the risk management system, returning incident type, financial impact, root cause, and remediation status."
  tags:
    - risk
    - operational-risk
capability:
  exposes:
    - type: mcp
      namespace: op-risk-incidents
      port: 8080
      tools:
        - name: get-incident
          description: "Look up an operational risk incident."
          inputParameters:
            - name: incident_id
              in: body
              type: string
              description: "The incident ID."
          call: "risk-system.get-incident"
          with:
            incident_id: "{{incident_id}}"
          outputParameters:
            - name: type
              type: string
              mapping: "$.incident.type"
            - name: financial_impact
              type: string
              mapping: "$.incident.financialImpact"
            - name: root_cause
              type: string
              mapping: "$.incident.rootCause"
            - name: remediation_status
              type: string
              mapping: "$.incident.remediationStatus"
  consumes:
    - type: http
      namespace: risk-system
      baseUri: "https://risk-management.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.risk_system_token"
      resources:
        - name: incidents
          path: "/op-risk/incidents/{{incident_id}}"
          inputParameters:
            - name: incident_id
              in: path
          operations:
            - name: get-incident
              method: GET

Reconciles payment clearing by extracting settled payments from the payment hub, matching against the general ledger, identifying breaks, and creating resolution tasks in the operations system.

naftiko: "0.5"
info:
  label: "Payment Clearing Reconciliation Pipeline"
  description: "Reconciles payment clearing by extracting settled payments from the payment hub, matching against the general ledger, identifying breaks, and creating resolution tasks in the operations system."
  tags:
    - operations
    - payments
    - reconciliation
capability:
  exposes:
    - type: mcp
      namespace: clearing-recon
      port: 8080
      tools:
        - name: reconcile-clearing
          description: "Reconcile payment clearing for a business date."
          inputParameters:
            - name: business_date
              in: body
              type: string
              description: "The business date."
            - name: payment_type
              in: body
              type: string
              description: "Payment type (ACH, wire, SWIFT)."
          steps:
            - name: extract-settlements
              type: call
              call: "payment-hub.get-settled"
              with:
                date: "{{business_date}}"
                type: "{{payment_type}}"
            - name: match-gl
              type: call
              call: "gl-system.match-entries"
              with:
                date: "{{business_date}}"
                settlement_count: "{{extract-settlements.count}}"
            - name: identify-breaks
              type: call
              call: "recon-engine.find-breaks"
              with:
                matched: "{{match-gl.matched_count}}"
                total: "{{extract-settlements.count}}"
            - name: create-tasks
              type: call
              call: "ops-system.create-recon-tasks"
              with:
                break_count: "{{identify-breaks.break_count}}"
                total_break_amount: "{{identify-breaks.total_amount}}"
                business_date: "{{business_date}}"
  consumes:
    - type: http
      namespace: payment-hub
      baseUri: "https://payment-hub.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.payment_hub_token"
      resources:
        - name: settlements
          path: "/settlements"
          operations:
            - name: get-settled
              method: GET
    - type: http
      namespace: gl-system
      baseUri: "https://general-ledger.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.gl_token"
      resources:
        - name: matching
          path: "/match"
          operations:
            - name: match-entries
              method: POST
    - type: http
      namespace: recon-engine
      baseUri: "https://reconciliation.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.recon_token"
      resources:
        - name: breaks
          path: "/breaks/identify"
          operations:
            - name: find-breaks
              method: POST
    - type: http
      namespace: ops-system
      baseUri: "https://operations.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ops_token"
      resources:
        - name: tasks
          path: "/tasks/reconciliation"
          operations:
            - name: create-recon-tasks
              method: POST

Retrieves the current positions for a managed portfolio from the portfolio management system. Returns holdings, market values, and weights. Used by portfolio managers and wealth advisors.

naftiko: "0.5"
info:
  label: "Portfolio Position Lookup"
  description: "Retrieves the current positions for a managed portfolio from the portfolio management system. Returns holdings, market values, and weights. Used by portfolio managers and wealth advisors."
  tags:
    - wealth-management
    - portfolio
    - positions
capability:
  exposes:
    - type: mcp
      namespace: portfolio-mgmt
      port: 8080
      tools:
        - name: get-positions
          description: "Fetch current holdings for a portfolio by portfolio ID. Returns list of positions with instrument, quantity, market value, and weight."
          inputParameters:
            - name: portfolio_id
              in: body
              type: string
              description: "The internal portfolio identifier."
          call: "portfolio-svc.get-positions"
          with:
            portfolio_id: "{{portfolio_id}}"
          outputParameters:
            - name: total_market_value
              type: number
              mapping: "$.portfolio.totalMarketValue"
            - name: currency
              type: string
              mapping: "$.portfolio.currency"
            - name: positions_count
              type: number
              mapping: "$.portfolio.positionsCount"
  consumes:
    - type: http
      namespace: portfolio-svc
      baseUri: "https://portfolio-api.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.portfolio_api_token"
      resources:
        - name: positions
          path: "/portfolios/{{portfolio_id}}/positions"
          inputParameters:
            - name: portfolio_id
              in: path
          operations:
            - name: get-positions
              method: GET

# ---------------------------------------------------------------------------
# 7. ACH Payment Retrieval (simple)
# ---------------------------------------------------------------------------

Retrieves prime brokerage client portfolio data, returning NAV, gross exposure, net exposure, and margin utilization for hedge fund clients.

naftiko: "0.5"
info:
  label: "Prime Brokerage Portfolio Lookup"
  description: "Retrieves prime brokerage client portfolio data, returning NAV, gross exposure, net exposure, and margin utilization for hedge fund clients."
  tags:
    - prime-brokerage
    - portfolio
capability:
  exposes:
    - type: mcp
      namespace: prime-brokerage
      port: 8080
      tools:
        - name: get-pb-portfolio
          description: "Look up a prime brokerage client portfolio."
          inputParameters:
            - name: fund_id
              in: body
              type: string
              description: "The fund account ID."
          call: "pb-platform.get-portfolio"
          with:
            fund_id: "{{fund_id}}"
          outputParameters:
            - name: nav
              type: string
              mapping: "$.portfolio.nav"
            - name: gross_exposure
              type: string
              mapping: "$.portfolio.grossExposure"
            - name: net_exposure
              type: string
              mapping: "$.portfolio.netExposure"
            - name: margin_utilization
              type: string
              mapping: "$.portfolio.marginUtilization"
  consumes:
    - type: http
      namespace: pb-platform
      baseUri: "https://prime-brokerage.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pb_token"
      resources:
        - name: portfolios
          path: "/funds/{{fund_id}}/portfolio"
          inputParameters:
            - name: fund_id
              in: path
          operations:
            - name: get-portfolio
              method: GET

Prepares a quarterly client review for private banking: pulls portfolio performance, retrieves recent transactions, fetches CRM activity notes from Salesforce, and generates a briefing document in SharePoint.

naftiko: "0.5"
info:
  label: "Private Banking Client Review Preparation"
  description: "Prepares a quarterly client review for private banking: pulls portfolio performance, retrieves recent transactions, fetches CRM activity notes from Salesforce, and generates a briefing document in SharePoint."
  tags:
    - wealth-management
    - private-banking
    - portfolio
    - salesforce
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: client-review-prep
      port: 8080
      tools:
        - name: prepare-review
          description: "Assemble portfolio performance, transactions, CRM notes, and generate a briefing document."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The private banking client identifier."
            - name: portfolio_id
              in: body
              type: string
              description: "The client portfolio identifier."
            - name: review_period
              in: body
              type: string
              description: "Review period (e.g., Q1-2026)."
          steps:
            - name: get-performance
              type: call
              call: "portfolio-svc.get-performance"
              with:
                portfolio_id: "{{portfolio_id}}"
                period: "{{review_period}}"
            - name: get-transactions
              type: call
              call: "portfolio-svc.get-transactions"
              with:
                portfolio_id: "{{portfolio_id}}"
                period: "{{review_period}}"
            - name: get-crm-notes
              type: call
              call: "salesforce.get-activity"
              with:
                client_id: "{{client_id}}"
                period: "{{review_period}}"
            - name: generate-briefing
              type: call
              call: "sharepoint.create-document"
              with:
                site_id: "private_banking_site"
                folder_path: "ClientReviews/{{client_id}}/{{review_period}}"
                document_name: "Quarterly_Review_{{review_period}}.docx"
                performance_data: "{{get-performance.summary}}"
                transactions_data: "{{get-transactions.summary}}"
                crm_notes: "{{get-crm-notes.notes}}"
  consumes:
    - type: http
      namespace: portfolio-svc
      baseUri: "https://portfolio-api.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.portfolio_api_token"
      resources:
        - name: performance
          path: "/portfolios/{{portfolio_id}}/performance"
          inputParameters:
            - name: portfolio_id
              in: path
          operations:
            - name: get-performance
              method: GET
        - name: transactions
          path: "/portfolios/{{portfolio_id}}/transactions"
          inputParameters:
            - name: portfolio_id
              in: path
          operations:
            - name: get-transactions
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://jpmorgan.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: activity
          path: "/query"
          operations:
            - name: get-activity
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: documents
          path: "/{{site_id}}/drive/root:/{{folder_path}}/{{document_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
            - name: document_name
              in: path
          operations:
            - name: create-document
              method: PUT

# ---------------------------------------------------------------------------
# 37. Trade Settlement Exception Resolution (orchestrated)
# ---------------------------------------------------------------------------

Retrieves private equity fund performance metrics, returning IRR, TVPI, DPI, and committed capital for JPMorgan asset management PE funds.

naftiko: "0.5"
info:
  label: "Private Equity Fund Performance"
  description: "Retrieves private equity fund performance metrics, returning IRR, TVPI, DPI, and committed capital for JPMorgan asset management PE funds."
  tags:
    - asset-management
    - private-equity
capability:
  exposes:
    - type: mcp
      namespace: pe-performance
      port: 8080
      tools:
        - name: get-pe-performance
          description: "Retrieve private equity fund performance."
          inputParameters:
            - name: fund_id
              in: body
              type: string
              description: "The PE fund ID."
          call: "am-platform.get-pe-metrics"
          with:
            fund_id: "{{fund_id}}"
          outputParameters:
            - name: irr
              type: string
              mapping: "$.performance.irr"
            - name: tvpi
              type: string
              mapping: "$.performance.tvpi"
            - name: dpi
              type: string
              mapping: "$.performance.dpi"
            - name: committed_capital
              type: string
              mapping: "$.performance.committedCapital"
  consumes:
    - type: http
      namespace: am-platform
      baseUri: "https://asset-management.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.am_token"
      resources:
        - name: pe-funds
          path: "/pe-funds/{{fund_id}}/performance"
          inputParameters:
            - name: fund_id
              in: path
          operations:
            - name: get-pe-metrics
              method: GET

Before executing a real-time payment, scores the transaction through the fraud detection engine, screens the payee, and then submits via the RTP network. Blocks and escalates if fraud score is high.

naftiko: "0.5"
info:
  label: "Real-Time Payments with Fraud Detection"
  description: "Before executing a real-time payment, scores the transaction through the fraud detection engine, screens the payee, and then submits via the RTP network. Blocks and escalates if fraud score is high."
  tags:
    - payments
    - rtp
    - fraud
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: rtp-payments
      port: 8080
      tools:
        - name: send-rtp-payment
          description: "Score for fraud, screen payee, and submit a real-time payment."
          inputParameters:
            - name: payer_account
              in: body
              type: string
              description: "Payer account number."
            - name: payee_name
              in: body
              type: string
              description: "Full name of the payee."
            - name: payee_account
              in: body
              type: string
              description: "Payee account or routing number."
            - name: amount
              in: body
              type: number
              description: "Payment amount in USD."
            - name: memo
              in: body
              type: string
              description: "Payment memo or reference."
          steps:
            - name: fraud-score
              type: call
              call: "fraud-engine.score"
              with:
                payer_account: "{{payer_account}}"
                payee_account: "{{payee_account}}"
                amount: "{{amount}}"
            - name: screen-payee
              type: call
              call: "sanctions-svc.screen"
              with:
                party_name: "{{payee_name}}"
                country_code: "US"
            - name: submit-rtp
              type: call
              call: "rtp-network.submit"
              with:
                payer_account: "{{payer_account}}"
                payee_account: "{{payee_account}}"
                payee_name: "{{payee_name}}"
                amount: "{{amount}}"
                memo: "{{memo}}"
                fraud_score: "{{fraud-score.score}}"
  consumes:
    - type: http
      namespace: fraud-engine
      baseUri: "https://fraud-engine.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.fraud_engine_token"
      resources:
        - name: scoring
          path: "/score"
          operations:
            - name: score
              method: POST
    - type: http
      namespace: sanctions-svc
      baseUri: "https://sanctions-screening.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.sanctions_svc_token"
      resources:
        - name: screenings
          path: "/screen"
          operations:
            - name: screen
              method: POST
    - type: http
      namespace: rtp-network
      baseUri: "https://rtp-gateway.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.rtp_gateway_token"
      resources:
        - name: payments
          path: "/payments"
          operations:
            - name: submit
              method: POST

# ---------------------------------------------------------------------------
# 31. Custody Corporate Action Processing (orchestrated)
# ---------------------------------------------------------------------------

Looks up a legal entity in the enterprise reference data service by LEI or short name. Returns full legal name, domicile, sector classification, and parent hierarchy. Used across the firm for entity resolution.

naftiko: "0.5"
info:
  label: "Reference Data Entity Lookup"
  description: "Looks up a legal entity in the enterprise reference data service by LEI or short name. Returns full legal name, domicile, sector classification, and parent hierarchy. Used across the firm for entity resolution."
  tags:
    - reference-data
    - entity
    - operations
capability:
  exposes:
    - type: mcp
      namespace: ref-data
      port: 8080
      tools:
        - name: get-entity
          description: "Look up a legal entity by LEI. Returns full legal name, domicile, GICS sector, and parent entity."
          inputParameters:
            - name: lei
              in: body
              type: string
              description: "The 20-character Legal Entity Identifier."
          call: "ref-data-svc.get-entity"
          with:
            lei: "{{lei}}"
          outputParameters:
            - name: legal_name
              type: string
              mapping: "$.entity.legalName"
            - name: domicile
              type: string
              mapping: "$.entity.domicileCountry"
            - name: gics_sector
              type: string
              mapping: "$.entity.gicsSector"
            - name: parent_lei
              type: string
              mapping: "$.entity.parentLEI"
  consumes:
    - type: http
      namespace: ref-data-svc
      baseUri: "https://ref-data.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.ref_data_token"
      resources:
        - name: entities
          path: "/entities/{{lei}}"
          inputParameters:
            - name: lei
              in: path
          operations:
            - name: get-entity
              method: GET

# ---------------------------------------------------------------------------
# 12. FX Spot Rate Retrieval (simple)
# ---------------------------------------------------------------------------

Retrieves instrument reference data from the golden source, returning ISIN, ticker, instrument type, currency, and exchange for trade booking.

naftiko: "0.5"
info:
  label: "Reference Data Instrument Lookup"
  description: "Retrieves instrument reference data from the golden source, returning ISIN, ticker, instrument type, currency, and exchange for trade booking."
  tags:
    - reference-data
    - trading
capability:
  exposes:
    - type: mcp
      namespace: instrument-reference
      port: 8080
      tools:
        - name: get-instrument
          description: "Look up instrument reference data."
          inputParameters:
            - name: identifier
              in: body
              type: string
              description: "The instrument identifier (ISIN, ticker, CUSIP)."
          call: "ref-data.get-instrument"
          with:
            identifier: "{{identifier}}"
          outputParameters:
            - name: isin
              type: string
              mapping: "$.instrument.isin"
            - name: ticker
              type: string
              mapping: "$.instrument.ticker"
            - name: instrument_type
              type: string
              mapping: "$.instrument.type"
            - name: currency
              type: string
              mapping: "$.instrument.currency"
  consumes:
    - type: http
      namespace: ref-data
      baseUri: "https://reference-data.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.ref_data_token"
      resources:
        - name: instruments
          path: "/instruments/{{identifier}}"
          inputParameters:
            - name: identifier
              in: path
          operations:
            - name: get-instrument
              method: GET

Aggregates risk-weighted assets from the risk engine, calculates capital ratios, generates the regulatory report, submits to the filing platform, and notifies the regulatory affairs team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Regulatory Capital Calculation and Filing"
  description: "Aggregates risk-weighted assets from the risk engine, calculates capital ratios, generates the regulatory report, submits to the filing platform, and notifies the regulatory affairs team via Microsoft Teams."
  tags:
    - risk
    - regulatory
    - capital
    - compliance
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: reg-capital
      port: 8080
      tools:
        - name: calculate-and-file
          description: "Aggregate RWA, calculate capital ratios, generate and submit the regulatory filing, and notify the team."
          inputParameters:
            - name: reporting_date
              in: body
              type: string
              description: "Reporting date in YYYY-MM-DD format."
            - name: report_type
              in: body
              type: string
              description: "Report type (e.g., FR_Y9C, CCAR)."
            - name: team_channel_id
              in: body
              type: string
              description: "Microsoft Teams channel ID for notification."
          steps:
            - name: get-rwa
              type: call
              call: "risk-engine.get-rwa"
              with:
                reporting_date: "{{reporting_date}}"
            - name: calc-ratios
              type: call
              call: "capital-engine.calculate-ratios"
              with:
                rwa_total: "{{get-rwa.totalRWA}}"
                reporting_date: "{{reporting_date}}"
            - name: submit-filing
              type: call
              call: "reg-platform.submit-filing"
              with:
                report_type: "{{report_type}}"
                reporting_date: "{{reporting_date}}"
                cet1_ratio: "{{calc-ratios.cet1Ratio}}"
                tier1_ratio: "{{calc-ratios.tier1Ratio}}"
                total_capital_ratio: "{{calc-ratios.totalCapitalRatio}}"
            - name: notify-team
              type: call
              call: "msteams.post-channel"
              with:
                channel_id: "{{team_channel_id}}"
                text: "Regulatory filing submitted: {{report_type}} for {{reporting_date}}. CET1: {{calc-ratios.cet1Ratio}}%. Tier1: {{calc-ratios.tier1Ratio}}%. Filing ID: {{submit-filing.filingId}}."
  consumes:
    - type: http
      namespace: risk-engine
      baseUri: "https://risk-engine.jpmorgan.com/api/v3"
      authentication:
        type: bearer
        token: "$secrets.risk_engine_token"
      resources:
        - name: rwa
          path: "/rwa/{{reporting_date}}"
          inputParameters:
            - name: reporting_date
              in: path
          operations:
            - name: get-rwa
              method: GET
    - type: http
      namespace: capital-engine
      baseUri: "https://capital-engine.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.capital_engine_token"
      resources:
        - name: ratios
          path: "/ratios"
          operations:
            - name: calculate-ratios
              method: POST
    - type: http
      namespace: reg-platform
      baseUri: "https://reg-reporting.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.reg_platform_token"
      resources:
        - name: filings
          path: "/filings"
          operations:
            - name: submit-filing
              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/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-channel
              method: POST

# ---------------------------------------------------------------------------
# 26. Cash Management Sweep Orchestrator (orchestrated)
# ---------------------------------------------------------------------------

Checks the submission status of a regulatory filing (e.g., FR Y-14, CCAR) from the regulatory reporting platform. Returns filing status, submission timestamp, and acknowledgement ID. Used by regulatory affairs teams.

naftiko: "0.5"
info:
  label: "Regulatory Report Status"
  description: "Checks the submission status of a regulatory filing (e.g., FR Y-14, CCAR) from the regulatory reporting platform. Returns filing status, submission timestamp, and acknowledgement ID. Used by regulatory affairs teams."
  tags:
    - compliance
    - regulatory
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: regulatory-reporting
      port: 8080
      tools:
        - name: get-filing-status
          description: "Check the status of a regulatory filing by report ID. Returns filing status, submission timestamp, and regulator acknowledgement ID."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "The regulatory report filing identifier."
          call: "reg-platform.get-filing"
          with:
            report_id: "{{report_id}}"
          outputParameters:
            - name: filing_status
              type: string
              mapping: "$.filing.status"
            - name: submitted_at
              type: string
              mapping: "$.filing.submittedAt"
            - name: ack_id
              type: string
              mapping: "$.filing.acknowledgementId"
  consumes:
    - type: http
      namespace: reg-platform
      baseUri: "https://reg-reporting.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.reg_platform_token"
      resources:
        - name: filings
          path: "/filings/{{report_id}}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-filing
              method: GET

# ---------------------------------------------------------------------------
# 15. Athena Pricing Model Execution (simple)
# ---------------------------------------------------------------------------

Orchestrates regulatory stress test submission by extracting portfolio data, running stress scenarios in the risk engine, compiling the CCAR/DFAST report, and submitting to the Federal Reserve portal.

naftiko: "0.5"
info:
  label: "Regulatory Stress Test Submission Pipeline"
  description: "Orchestrates regulatory stress test submission by extracting portfolio data, running stress scenarios in the risk engine, compiling the CCAR/DFAST report, and submitting to the Federal Reserve portal."
  tags:
    - regulatory
    - risk
    - stress-testing
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: stress-test-submission
      port: 8080
      tools:
        - name: submit-stress-test
          description: "Execute and submit a regulatory stress test."
          inputParameters:
            - name: test_cycle
              in: body
              type: string
              description: "The stress test cycle (e.g. CCAR-2026)."
            - name: scenario_set
              in: body
              type: string
              description: "The scenario set (baseline, adverse, severely_adverse)."
          steps:
            - name: extract-portfolios
              type: call
              call: "risk-engine.extract-positions"
              with:
                test_cycle: "{{test_cycle}}"
            - name: run-scenarios
              type: call
              call: "risk-engine.run-stress-scenarios"
              with:
                test_cycle: "{{test_cycle}}"
                scenario_set: "{{scenario_set}}"
                portfolio_id: "{{extract-portfolios.portfolio_id}}"
            - name: compile-report
              type: call
              call: "reporting-engine.compile-ccar"
              with:
                test_cycle: "{{test_cycle}}"
                results_id: "{{run-scenarios.results_id}}"
            - name: submit-to-fed
              type: call
              call: "regulatory-gateway.submit"
              with:
                report_id: "{{compile-report.report_id}}"
                test_cycle: "{{test_cycle}}"
  consumes:
    - type: http
      namespace: risk-engine
      baseUri: "https://risk-engine.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.risk_engine_token"
      resources:
        - name: positions
          path: "/stress-test/extract"
          operations:
            - name: extract-positions
              method: POST
        - name: scenarios
          path: "/stress-test/run"
          operations:
            - name: run-stress-scenarios
              method: POST
    - type: http
      namespace: reporting-engine
      baseUri: "https://regulatory-reporting.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.reporting_token"
      resources:
        - name: ccar
          path: "/ccar/compile"
          operations:
            - name: compile-ccar
              method: POST
    - type: http
      namespace: regulatory-gateway
      baseUri: "https://regulatory-gateway.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.regulatory_gateway_token"
      resources:
        - name: submissions
          path: "/submit"
          operations:
            - name: submit
              method: POST

Orchestrates repo trade booking by validating collateral, booking the trade in the OMS, initiating settlement via the custody system, and confirming with the counterparty via messaging.

naftiko: "0.5"
info:
  label: "Repo Trade Booking and Settlement Orchestrator"
  description: "Orchestrates repo trade booking by validating collateral, booking the trade in the OMS, initiating settlement via the custody system, and confirming with the counterparty via messaging."
  tags:
    - trading
    - fixed-income
    - repo
    - settlement
capability:
  exposes:
    - type: mcp
      namespace: repo-trading
      port: 8080
      tools:
        - name: book-repo-trade
          description: "Book and settle a repo trade."
          inputParameters:
            - name: security_id
              in: body
              type: string
              description: "The collateral security ISIN."
            - name: notional
              in: body
              type: string
              description: "The repo notional amount."
            - name: counterparty_id
              in: body
              type: string
              description: "The counterparty ID."
            - name: repo_rate
              in: body
              type: string
              description: "The repo rate."
          steps:
            - name: validate-collateral
              type: call
              call: "collateral-mgmt.validate"
              with:
                security_id: "{{security_id}}"
                notional: "{{notional}}"
            - name: book-trade
              type: call
              call: "oms.book-repo"
              with:
                security_id: "{{security_id}}"
                notional: "{{notional}}"
                counterparty_id: "{{counterparty_id}}"
                rate: "{{repo_rate}}"
                haircut: "{{validate-collateral.haircut}}"
            - name: initiate-settlement
              type: call
              call: "custody.settle-repo"
              with:
                trade_ref: "{{book-trade.tradeRef}}"
                security_id: "{{security_id}}"
            - name: confirm-counterparty
              type: call
              call: "messaging.send-confirmation"
              with:
                counterparty_id: "{{counterparty_id}}"
                message: "Repo booked: {{book-trade.tradeRef}}. Collateral: {{security_id}}. Notional: {{notional}}. Rate: {{repo_rate}}. Settlement: {{initiate-settlement.settlement_date}}."
  consumes:
    - type: http
      namespace: collateral-mgmt
      baseUri: "https://collateral.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.collateral_token"
      resources:
        - name: validation
          path: "/validate"
          operations:
            - name: validate
              method: POST
    - type: http
      namespace: oms
      baseUri: "https://oms.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.oms_token"
      resources:
        - name: repos
          path: "/repos"
          operations:
            - name: book-repo
              method: POST
    - type: http
      namespace: custody
      baseUri: "https://custody.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.custody_token"
      resources:
        - name: settlement
          path: "/settle"
          operations:
            - name: settle-repo
              method: POST
    - type: http
      namespace: messaging
      baseUri: "https://client-messaging.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.messaging_token"
      resources:
        - name: confirmations
          path: "/confirmations"
          operations:
            - name: send-confirmation
              method: POST

Screens a party name against OFAC, EU, and UN sanctions lists via the sanctions screening service. Returns match score, list source, and screening timestamp. Used by compliance for transaction and onboarding screening.

naftiko: "0.5"
info:
  label: "Sanctions Screening Check"
  description: "Screens a party name against OFAC, EU, and UN sanctions lists via the sanctions screening service. Returns match score, list source, and screening timestamp. Used by compliance for transaction and onboarding screening."
  tags:
    - compliance
    - sanctions
    - aml
capability:
  exposes:
    - type: mcp
      namespace: compliance-sanctions
      port: 8080
      tools:
        - name: screen-party
          description: "Screen a party name against global sanctions lists. Returns match score, matched list, and screening timestamp."
          inputParameters:
            - name: party_name
              in: body
              type: string
              description: "The full name of the individual or entity to screen."
            - name: country_code
              in: body
              type: string
              description: "ISO 3166-1 alpha-2 country code of the party."
          call: "sanctions-svc.screen"
          with:
            party_name: "{{party_name}}"
            country_code: "{{country_code}}"
          outputParameters:
            - name: match_score
              type: number
              mapping: "$.screening.highestMatchScore"
            - name: matched_list
              type: string
              mapping: "$.screening.matchedList"
            - name: screening_timestamp
              type: string
              mapping: "$.screening.timestamp"
  consumes:
    - type: http
      namespace: sanctions-svc
      baseUri: "https://sanctions-screening.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.sanctions_svc_token"
      resources:
        - name: screenings
          path: "/screen"
          operations:
            - name: screen
              method: POST

# ---------------------------------------------------------------------------
# 10. VaR Calculation Retrieval (simple)
# ---------------------------------------------------------------------------

Retrieves securities clearing and settlement status from the post-trade platform, returning clearing status, settlement instruction status, and matched/unmatched indicator.

naftiko: "0.5"
info:
  label: "Securities Clearing Status Lookup"
  description: "Retrieves securities clearing and settlement status from the post-trade platform, returning clearing status, settlement instruction status, and matched/unmatched indicator."
  tags:
    - operations
    - clearing
    - settlement
capability:
  exposes:
    - type: mcp
      namespace: securities-clearing
      port: 8080
      tools:
        - name: get-clearing-status
          description: "Look up securities clearing status."
          inputParameters:
            - name: trade_ref
              in: body
              type: string
              description: "The trade reference."
          call: "post-trade.get-clearing"
          with:
            trade_ref: "{{trade_ref}}"
          outputParameters:
            - name: clearing_status
              type: string
              mapping: "$.clearing.status"
            - name: settlement_instruction
              type: string
              mapping: "$.clearing.settlementInstruction"
            - name: matched
              type: string
              mapping: "$.clearing.matchStatus"
            - name: settlement_date
              type: string
              mapping: "$.clearing.settlementDate"
  consumes:
    - type: http
      namespace: post-trade
      baseUri: "https://post-trade.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.post_trade_token"
      resources:
        - name: clearing
          path: "/clearing/{{trade_ref}}"
          inputParameters:
            - name: trade_ref
              in: path
          operations:
            - name: get-clearing
              method: GET

Checks securities lending availability for a given ISIN, sources a locate from the inventory pool, books the borrow in the lending system, and confirms to the requesting trader via messaging.

naftiko: "0.5"
info:
  label: "Securities Lending Availability and Locate"
  description: "Checks securities lending availability for a given ISIN, sources a locate from the inventory pool, books the borrow in the lending system, and confirms to the requesting trader via messaging."
  tags:
    - trading
    - securities-lending
    - prime-brokerage
capability:
  exposes:
    - type: mcp
      namespace: sec-lending
      port: 8080
      tools:
        - name: locate-and-borrow
          description: "Check availability, source a locate, book the borrow, and confirm to the trader."
          inputParameters:
            - name: isin
              in: body
              type: string
              description: "The ISIN of the security to borrow."
            - name: quantity
              in: body
              type: number
              description: "Number of shares to borrow."
            - name: trader_email
              in: body
              type: string
              description: "Email of the requesting trader."
          steps:
            - name: check-availability
              type: call
              call: "lending-platform.check-availability"
              with:
                isin: "{{isin}}"
                quantity: "{{quantity}}"
            - name: book-borrow
              type: call
              call: "lending-platform.book-borrow"
              with:
                isin: "{{isin}}"
                quantity: "{{quantity}}"
                rate: "{{check-availability.indicativeRate}}"
                lender_pool: "{{check-availability.lenderPool}}"
            - name: confirm-trader
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{trader_email}}"
                text: "Locate confirmed: {{quantity}} shares of {{isin}} at {{check-availability.indicativeRate}} bps. Borrow ref: {{book-borrow.borrowRef}}. Available pool: {{check-availability.availableQty}}."
  consumes:
    - type: http
      namespace: lending-platform
      baseUri: "https://sec-lending.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.sec_lending_token"
      resources:
        - name: availability
          path: "/availability"
          operations:
            - name: check-availability
              method: POST
        - name: borrows
          path: "/borrows"
          operations:
            - name: book-borrow
              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

# ---------------------------------------------------------------------------
# 44. Blockchain Payment Rail Settlement (orchestrated)
# ---------------------------------------------------------------------------

Runs a regulatory stress test scenario across portfolios: applies market shocks, recalculates P&L impact, aggregates losses, and stores results in the regulatory reporting platform for CCAR/DFAST submission.

naftiko: "0.5"
info:
  label: "Stress Test Scenario Execution"
  description: "Runs a regulatory stress test scenario across portfolios: applies market shocks, recalculates P&L impact, aggregates losses, and stores results in the regulatory reporting platform for CCAR/DFAST submission."
  tags:
    - risk
    - stress-testing
    - regulatory
    - ccar
capability:
  exposes:
    - type: mcp
      namespace: stress-testing
      port: 8080
      tools:
        - name: run-stress-test
          description: "Apply scenario shocks, calculate portfolio impacts, aggregate results, and store for regulatory filing."
          inputParameters:
            - name: scenario_id
              in: body
              type: string
              description: "The stress test scenario identifier."
            - name: reporting_date
              in: body
              type: string
              description: "Reporting date in YYYY-MM-DD format."
          steps:
            - name: get-scenario
              type: call
              call: "stress-engine.get-scenario"
              with:
                scenario_id: "{{scenario_id}}"
            - name: apply-shocks
              type: call
              call: "stress-engine.apply-shocks"
              with:
                scenario_id: "{{scenario_id}}"
                reporting_date: "{{reporting_date}}"
            - name: aggregate-results
              type: call
              call: "stress-engine.aggregate"
              with:
                run_id: "{{apply-shocks.runId}}"
            - name: store-results
              type: call
              call: "reg-platform.submit-stress-results"
              with:
                scenario_id: "{{scenario_id}}"
                reporting_date: "{{reporting_date}}"
                total_loss: "{{aggregate-results.totalLoss}}"
                capital_impact: "{{aggregate-results.capitalImpact}}"
                run_id: "{{apply-shocks.runId}}"
  consumes:
    - type: http
      namespace: stress-engine
      baseUri: "https://stress-testing.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.stress_engine_token"
      resources:
        - name: scenarios
          path: "/scenarios/{{scenario_id}}"
          inputParameters:
            - name: scenario_id
              in: path
          operations:
            - name: get-scenario
              method: GET
        - name: shocks
          path: "/execute"
          operations:
            - name: apply-shocks
              method: POST
        - name: aggregation
          path: "/runs/{{run_id}}/aggregate"
          inputParameters:
            - name: run_id
              in: path
          operations:
            - name: aggregate
              method: POST
    - type: http
      namespace: reg-platform
      baseUri: "https://reg-reporting.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.reg_platform_token"
      resources:
        - name: stress-results
          path: "/stress-results"
          operations:
            - name: submit-stress-results
              method: POST

# ---------------------------------------------------------------------------
# 33. Liquidity Coverage Ratio Monitoring (orchestrated)
# ---------------------------------------------------------------------------

Retrieves structured note pricing from Athena, returning indicative price, embedded option value, credit spread, and coupon schedule for wealth management products.

naftiko: "0.5"
info:
  label: "Structured Note Pricing"
  description: "Retrieves structured note pricing from Athena, returning indicative price, embedded option value, credit spread, and coupon schedule for wealth management products."
  tags:
    - structured-products
    - wealth-management
    - pricing
capability:
  exposes:
    - type: mcp
      namespace: structured-notes
      port: 8080
      tools:
        - name: price-note
          description: "Price a structured note via Athena."
          inputParameters:
            - name: note_id
              in: body
              type: string
              description: "The structured note ISIN."
          call: "athena.price-structured-note"
          with:
            note_id: "{{note_id}}"
          outputParameters:
            - name: indicative_price
              type: string
              mapping: "$.pricing.indicativePrice"
            - name: option_value
              type: string
              mapping: "$.pricing.embeddedOptionValue"
            - name: credit_spread
              type: string
              mapping: "$.pricing.creditSpread"
  consumes:
    - type: http
      namespace: athena
      baseUri: "https://athena.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.athena_token"
      resources:
        - name: structured-notes
          path: "/pricing/structured-notes/{{note_id}}"
          inputParameters:
            - name: note_id
              in: path
          operations:
            - name: price-structured-note
              method: GET

Queries the SWIFT gpi tracker for a cross-border payment by UETR. Returns current status, creditor agent, and settlement date. Used by treasury operations to trace international wire transfers.

naftiko: "0.5"
info:
  label: "SWIFT Payment Status Lookup"
  description: "Queries the SWIFT gpi tracker for a cross-border payment by UETR. Returns current status, creditor agent, and settlement date. Used by treasury operations to trace international wire transfers."
  tags:
    - payments
    - swift
    - treasury
capability:
  exposes:
    - type: mcp
      namespace: payments-swift
      port: 8080
      tools:
        - name: get-payment-status
          description: "Track a SWIFT gpi payment by UETR. Returns transaction status, last update, creditor agent BIC, and settlement date."
          inputParameters:
            - name: uetr
              in: body
              type: string
              description: "The Unique End-to-End Transaction Reference for the SWIFT payment."
          call: "swift.get-payment-tracking"
          with:
            uetr: "{{uetr}}"
          outputParameters:
            - name: transaction_status
              type: string
              mapping: "$.payment_event.tracker_status"
            - name: creditor_agent_bic
              type: string
              mapping: "$.payment_event.creditor_agent"
            - name: settlement_date
              type: string
              mapping: "$.payment_event.settlement_date"
            - name: last_update
              type: string
              mapping: "$.payment_event.last_update_time"
  consumes:
    - type: http
      namespace: swift
      baseUri: "https://api.swiftnet.sipn.swift.com/swift-apitracker/v4"
      authentication:
        type: bearer
        token: "$secrets.swift_gpi_token"
      resources:
        - name: payments
          path: "/payments/{{uetr}}/transactions"
          inputParameters:
            - name: uetr
              in: path
          operations:
            - name: get-payment-tracking
              method: GET

# ---------------------------------------------------------------------------
# 3. Market Data Quote Retrieval (simple)
# ---------------------------------------------------------------------------

Retrieves syndicated loan facility details, returning facility amount, drawn amount, participant banks, and agent bank for leveraged lending.

naftiko: "0.5"
info:
  label: "Syndicated Loan Facility Lookup"
  description: "Retrieves syndicated loan facility details, returning facility amount, drawn amount, participant banks, and agent bank for leveraged lending."
  tags:
    - lending
    - syndicated-loans
    - investment-banking
capability:
  exposes:
    - type: mcp
      namespace: syndicated-loans
      port: 8080
      tools:
        - name: get-facility
          description: "Look up a syndicated loan facility."
          inputParameters:
            - name: facility_id
              in: body
              type: string
              description: "The facility ID."
          call: "lending.get-syndicated-facility"
          with:
            facility_id: "{{facility_id}}"
          outputParameters:
            - name: facility_amount
              type: string
              mapping: "$.facility.totalAmount"
            - name: drawn_amount
              type: string
              mapping: "$.facility.drawnAmount"
            - name: participant_count
              type: number
              mapping: "$.facility.participantCount"
            - name: agent_bank
              type: string
              mapping: "$.facility.agentBank"
  consumes:
    - type: http
      namespace: lending
      baseUri: "https://lending-platform.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.lending_token"
      resources:
        - name: syndicated
          path: "/syndicated/facilities/{{facility_id}}"
          inputParameters:
            - name: facility_id
              in: path
          operations:
            - name: get-syndicated-facility
              method: GET

Orchestrates block trade allocation by splitting the fill across client accounts, booking individual allocations in the OMS, confirming with the custodian, and sending allocation details to clients.

naftiko: "0.5"
info:
  label: "Trade Allocation and Booking Orchestrator"
  description: "Orchestrates block trade allocation by splitting the fill across client accounts, booking individual allocations in the OMS, confirming with the custodian, and sending allocation details to clients."
  tags:
    - trading
    - allocation
    - oms
capability:
  exposes:
    - type: mcp
      namespace: trade-allocation
      port: 8080
      tools:
        - name: allocate-block-trade
          description: "Allocate a block trade across client accounts."
          inputParameters:
            - name: block_trade_id
              in: body
              type: string
              description: "The block trade ID."
            - name: allocation_scheme
              in: body
              type: string
              description: "The allocation scheme (pro-rata, manual)."
          steps:
            - name: calculate-allocations
              type: call
              call: "allocation-engine.calculate"
              with:
                block_trade_id: "{{block_trade_id}}"
                scheme: "{{allocation_scheme}}"
            - name: book-allocations
              type: call
              call: "oms.book-allocations"
              with:
                block_trade_id: "{{block_trade_id}}"
                allocations: "{{calculate-allocations.allocation_list}}"
            - name: confirm-custody
              type: call
              call: "custody.confirm-allocations"
              with:
                allocation_count: "{{book-allocations.allocation_count}}"
            - name: notify-clients
              type: call
              call: "messaging.send-allocation-notices"
              with:
                block_trade_id: "{{block_trade_id}}"
                allocation_count: "{{book-allocations.allocation_count}}"
  consumes:
    - type: http
      namespace: allocation-engine
      baseUri: "https://allocation.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.allocation_token"
      resources:
        - name: calculations
          path: "/calculate"
          operations:
            - name: calculate
              method: POST
    - type: http
      namespace: oms
      baseUri: "https://oms.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.oms_token"
      resources:
        - name: allocations
          path: "/allocations"
          operations:
            - name: book-allocations
              method: POST
    - type: http
      namespace: custody
      baseUri: "https://custody.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.custody_token"
      resources:
        - name: confirmations
          path: "/allocations/confirm"
          operations:
            - name: confirm-allocations
              method: POST
    - type: http
      namespace: messaging
      baseUri: "https://client-messaging.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.messaging_token"
      resources:
        - name: notices
          path: "/allocation-notices"
          operations:
            - name: send-allocation-notices
              method: POST

On receipt of a new equities order, submits to the FIX gateway, retrieves the fill status, books the trade in the OMS, and sends a confirmation to the client via the messaging platform.

naftiko: "0.5"
info:
  label: "Trade Execution and Confirmation Orchestrator"
  description: "On receipt of a new equities order, submits to the FIX gateway, retrieves the fill status, books the trade in the OMS, and sends a confirmation to the client via the messaging platform."
  tags:
    - trading
    - equities
    - fix-gateway
    - oms
    - confirmation
capability:
  exposes:
    - type: mcp
      namespace: trade-execution
      port: 8080
      tools:
        - name: execute-and-confirm
          description: "Submit an equities order, book the fill in the OMS, and send trade confirmation to the client."
          inputParameters:
            - name: symbol
              in: body
              type: string
              description: "The ticker symbol of the instrument."
            - name: side
              in: body
              type: string
              description: "BUY or SELL."
            - name: quantity
              in: body
              type: number
              description: "Number of shares."
            - name: order_type
              in: body
              type: string
              description: "Order type (MARKET, LIMIT)."
            - name: client_id
              in: body
              type: string
              description: "The client account identifier."
          steps:
            - name: submit-order
              type: call
              call: "fix-gw.submit-order"
              with:
                symbol: "{{symbol}}"
                side: "{{side}}"
                quantity: "{{quantity}}"
                order_type: "{{order_type}}"
            - name: book-trade
              type: call
              call: "oms.book-trade"
              with:
                cl_ord_id: "{{submit-order.clOrdId}}"
                client_id: "{{client_id}}"
                symbol: "{{symbol}}"
                side: "{{side}}"
                quantity: "{{submit-order.cumQty}}"
                price: "{{submit-order.avgPx}}"
            - name: send-confirmation
              type: call
              call: "messaging.send-confirmation"
              with:
                client_id: "{{client_id}}"
                message: "Trade confirmed: {{side}} {{submit-order.cumQty}} {{symbol}} at {{submit-order.avgPx}}. Order ref: {{submit-order.clOrdId}}. Booking ref: {{book-trade.bookingRef}}."
  consumes:
    - type: http
      namespace: fix-gw
      baseUri: "https://fix-gateway.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.fix_gateway_token"
      resources:
        - name: orders
          path: "/orders"
          operations:
            - name: submit-order
              method: POST
    - type: http
      namespace: oms
      baseUri: "https://oms.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.oms_token"
      resources:
        - name: bookings
          path: "/bookings"
          operations:
            - name: book-trade
              method: POST
    - type: http
      namespace: messaging
      baseUri: "https://client-messaging.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.messaging_token"
      resources:
        - name: confirmations
          path: "/confirmations"
          operations:
            - name: send-confirmation
              method: POST

# ---------------------------------------------------------------------------
# 17. Cross-Border Payment with Sanctions Screening (orchestrated)
# ---------------------------------------------------------------------------

Orchestrates LC issuance by verifying the applicant KYC, screening the beneficiary, creating the LC in the trade finance system, and transmitting to the advising bank via SWIFT MT700.

naftiko: "0.5"
info:
  label: "Trade Finance Letter of Credit Issuance"
  description: "Orchestrates LC issuance by verifying the applicant KYC, screening the beneficiary, creating the LC in the trade finance system, and transmitting to the advising bank via SWIFT MT700."
  tags:
    - commercial-banking
    - trade-finance
    - compliance
    - swift
    - kyc
capability:
  exposes:
    - type: mcp
      namespace: trade-finance
      port: 8080
      tools:
        - name: issue-letter-of-credit
          description: "Verify KYC, screen beneficiary, create LC, and transmit via SWIFT."
          inputParameters:
            - name: applicant_entity_id
              in: body
              type: string
              description: "Entity ID of the LC applicant."
            - name: beneficiary_name
              in: body
              type: string
              description: "Full name of the beneficiary."
            - name: beneficiary_country
              in: body
              type: string
              description: "Country code of the beneficiary."
            - name: advising_bank_bic
              in: body
              type: string
              description: "SWIFT BIC of the advising bank."
            - name: amount
              in: body
              type: number
              description: "LC amount."
            - name: currency
              in: body
              type: string
              description: "LC currency."
            - name: expiry_date
              in: body
              type: string
              description: "LC expiry date in YYYY-MM-DD format."
          steps:
            - name: verify-kyc
              type: call
              call: "kyc-platform.get-entity"
              with:
                entity_id: "{{applicant_entity_id}}"
            - name: screen-beneficiary
              type: call
              call: "sanctions-svc.screen"
              with:
                party_name: "{{beneficiary_name}}"
                country_code: "{{beneficiary_country}}"
            - name: create-lc
              type: call
              call: "trade-finance-svc.create-lc"
              with:
                applicant_entity_id: "{{applicant_entity_id}}"
                beneficiary_name: "{{beneficiary_name}}"
                amount: "{{amount}}"
                currency: "{{currency}}"
                expiry_date: "{{expiry_date}}"
            - name: transmit-mt700
              type: call
              call: "swift-messaging.send-mt700"
              with:
                advising_bank_bic: "{{advising_bank_bic}}"
                lc_number: "{{create-lc.lcNumber}}"
                amount: "{{amount}}"
                currency: "{{currency}}"
                beneficiary_name: "{{beneficiary_name}}"
                expiry_date: "{{expiry_date}}"
  consumes:
    - type: http
      namespace: kyc-platform
      baseUri: "https://kyc-platform.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.kyc_platform_token"
      resources:
        - name: entities
          path: "/entities/{{entity_id}}"
          inputParameters:
            - name: entity_id
              in: path
          operations:
            - name: get-entity
              method: GET
    - type: http
      namespace: sanctions-svc
      baseUri: "https://sanctions-screening.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.sanctions_svc_token"
      resources:
        - name: screenings
          path: "/screen"
          operations:
            - name: screen
              method: POST
    - type: http
      namespace: trade-finance-svc
      baseUri: "https://trade-finance.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.trade_finance_token"
      resources:
        - name: letters-of-credit
          path: "/lc"
          operations:
            - name: create-lc
              method: POST
    - type: http
      namespace: swift-messaging
      baseUri: "https://swift-messaging.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.swift_messaging_token"
      resources:
        - name: mt700
          path: "/messages/mt700"
          operations:
            - name: send-mt700
              method: POST

# ---------------------------------------------------------------------------
# 46. Interest Rate Swap Booking and Confirmation (orchestrated)
# ---------------------------------------------------------------------------

Orchestrates supply chain financing by verifying invoice data, approving early payment, executing the discounted payment to the supplier, and updating the buyer's payable schedule.

naftiko: "0.5"
info:
  label: "Trade Finance Supply Chain Orchestrator"
  description: "Orchestrates supply chain financing by verifying invoice data, approving early payment, executing the discounted payment to the supplier, and updating the buyer's payable schedule."
  tags:
    - trade-finance
    - supply-chain
    - commercial-banking
capability:
  exposes:
    - type: mcp
      namespace: supply-chain-finance
      port: 8080
      tools:
        - name: process-scf
          description: "Process a supply chain finance transaction."
          inputParameters:
            - name: invoice_id
              in: body
              type: string
              description: "The invoice ID."
            - name: buyer_id
              in: body
              type: string
              description: "The buyer client ID."
            - name: supplier_id
              in: body
              type: string
              description: "The supplier ID."
          steps:
            - name: verify-invoice
              type: call
              call: "trade-finance.verify-invoice"
              with:
                invoice_id: "{{invoice_id}}"
                buyer_id: "{{buyer_id}}"
            - name: approve-early-payment
              type: call
              call: "trade-finance.approve-payment"
              with:
                invoice_id: "{{invoice_id}}"
                discount_rate: "{{verify-invoice.discount_rate}}"
            - name: execute-payment
              type: call
              call: "payment-hub.execute-scf-payment"
              with:
                supplier_id: "{{supplier_id}}"
                amount: "{{approve-early-payment.discounted_amount}}"
            - name: update-schedule
              type: call
              call: "trade-finance.update-buyer-schedule"
              with:
                buyer_id: "{{buyer_id}}"
                invoice_id: "{{invoice_id}}"
                new_due_date: "{{approve-early-payment.extended_due_date}}"
  consumes:
    - type: http
      namespace: trade-finance
      baseUri: "https://trade-finance.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.trade_finance_token"
      resources:
        - name: invoices
          path: "/invoices/verify"
          operations:
            - name: verify-invoice
              method: POST
        - name: approvals
          path: "/payments/approve"
          operations:
            - name: approve-payment
              method: POST
        - name: schedules
          path: "/buyer-schedules/update"
          operations:
            - name: update-buyer-schedule
              method: POST
    - type: http
      namespace: payment-hub
      baseUri: "https://payment-hub.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.payment_hub_token"
      resources:
        - name: scf-payments
          path: "/scf/execute"
          operations:
            - name: execute-scf-payment
              method: POST

When a trade fails to settle, retrieves the settlement instruction from the OMS, checks the counterparty SSI in reference data, creates a ServiceNow incident, and notifies the operations team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Trade Settlement Exception Resolution"
  description: "When a trade fails to settle, retrieves the settlement instruction from the OMS, checks the counterparty SSI in reference data, creates a ServiceNow incident, and notifies the operations team via Microsoft Teams."
  tags:
    - operations
    - settlement
    - oms
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: settlement-exceptions
      port: 8080
      tools:
        - name: resolve-settlement-fail
          description: "Investigate a failed trade settlement, cross-check SSIs, open an incident, and notify ops."
          inputParameters:
            - name: trade_ref
              in: body
              type: string
              description: "The failed trade reference."
            - name: ops_team_email
              in: body
              type: string
              description: "Email of the settlement operations team."
          steps:
            - name: get-trade
              type: call
              call: "oms.get-trade"
              with:
                trade_ref: "{{trade_ref}}"
            - name: get-ssi
              type: call
              call: "ref-data-svc.get-ssi"
              with:
                counterparty_lei: "{{get-trade.counterpartyLEI}}"
                instrument_type: "{{get-trade.instrumentType}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Settlement fail: Trade {{trade_ref}} — {{get-trade.instrumentName}}"
                category: "settlement_exception"
                assigned_group: "Settlement_Ops"
                description: "Trade {{trade_ref}} failed settlement. Counterparty: {{get-trade.counterpartyName}}. Expected settlement: {{get-trade.settlementDate}}. SSI on file: {{get-ssi.custodianBIC}} / {{get-ssi.accountNumber}}."
            - name: notify-ops
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{ops_team_email}}"
                text: "SETTLEMENT FAIL: Trade {{trade_ref}} ({{get-trade.instrumentName}}). Counterparty: {{get-trade.counterpartyName}}. Incident: {{create-incident.number}}. Please investigate SSI mismatch."
  consumes:
    - type: http
      namespace: oms
      baseUri: "https://oms.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.oms_token"
      resources:
        - name: trades
          path: "/trades/{{trade_ref}}"
          inputParameters:
            - name: trade_ref
              in: path
          operations:
            - name: get-trade
              method: GET
    - type: http
      namespace: ref-data-svc
      baseUri: "https://ref-data.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.ref_data_token"
      resources:
        - name: ssi
          path: "/ssi/{{counterparty_lei}}/{{instrument_type}}"
          inputParameters:
            - name: counterparty_lei
              in: path
            - name: instrument_type
              in: path
          operations:
            - name: get-ssi
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://jpmorgan.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

# ---------------------------------------------------------------------------
# 38. Fraud Investigation Workflow (orchestrated)
# ---------------------------------------------------------------------------

When the trade surveillance system detects a potential market abuse pattern, enriches the alert with trader details from HR and trade data from the OMS, creates a compliance case, and notifies the surveillance team.

naftiko: "0.5"
info:
  label: "Trade Surveillance Alert Pipeline"
  description: "When the trade surveillance system detects a potential market abuse pattern, enriches the alert with trader details from HR and trade data from the OMS, creates a compliance case, and notifies the surveillance team."
  tags:
    - compliance
    - surveillance
    - trading
    - case-management
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: trade-surveillance
      port: 8080
      tools:
        - name: process-surveillance-alert
          description: "Enrich a surveillance alert with trader and trade details, create a compliance case, and notify the team."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "The surveillance alert identifier."
            - name: trader_id
              in: body
              type: string
              description: "The employee ID of the flagged trader."
            - name: surveillance_team_email
              in: body
              type: string
              description: "Email of the surveillance team lead."
          steps:
            - name: get-alert
              type: call
              call: "surveillance-engine.get-alert"
              with:
                alert_id: "{{alert_id}}"
            - name: get-trader
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{trader_id}}"
            - name: get-trades
              type: call
              call: "oms.get-trades-by-alert"
              with:
                alert_id: "{{alert_id}}"
            - name: create-case
              type: call
              call: "case-mgmt.create-case"
              with:
                title: "Surveillance: {{get-alert.alertType}} — {{get-trader.fullName}}"
                description: "Alert {{alert_id}} detected {{get-alert.alertType}} pattern. Trader: {{get-trader.fullName}} ({{get-trader.department}}). {{get-trades.tradeCount}} trades flagged over {{get-alert.detectionWindow}}."
                priority: "critical"
                category: "trade_surveillance"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{surveillance_team_email}}"
                text: "SURVEILLANCE ALERT: Case {{create-case.caseId}} opened. Type: {{get-alert.alertType}}. Trader: {{get-trader.fullName}}. {{get-trades.tradeCount}} trades flagged. Priority: critical."
  consumes:
    - type: http
      namespace: surveillance-engine
      baseUri: "https://surveillance-engine.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.surveillance_engine_token"
      resources:
        - name: alerts
          path: "/alerts/{{alert_id}}"
          inputParameters:
            - name: alert_id
              in: path
          operations:
            - name: get-alert
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: oms
      baseUri: "https://oms.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.oms_token"
      resources:
        - name: trade-alerts
          path: "/alerts/{{alert_id}}/trades"
          inputParameters:
            - name: alert_id
              in: path
          operations:
            - name: get-trades-by-alert
              method: GET
    - type: http
      namespace: case-mgmt
      baseUri: "https://case-management.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.case_mgmt_token"
      resources:
        - name: cases
          path: "/cases"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

# ---------------------------------------------------------------------------
# 30. Real-Time Payments (RTP) with Fraud Detection (orchestrated)
# ---------------------------------------------------------------------------

Retrieves real-time cash position data from the treasury management system, returning available balance, projected balance, and currency exposure by entity.

naftiko: "0.5"
info:
  label: "Treasury Cash Position Lookup"
  description: "Retrieves real-time cash position data from the treasury management system, returning available balance, projected balance, and currency exposure by entity."
  tags:
    - treasury
    - cash-management
capability:
  exposes:
    - type: mcp
      namespace: treasury-cash
      port: 8080
      tools:
        - name: get-cash-position
          description: "Look up real-time cash position."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The legal entity ID."
            - name: currency
              in: body
              type: string
              description: "The currency code."
          call: "treasury.get-position"
          with:
            entity_id: "{{entity_id}}"
            currency: "{{currency}}"
          outputParameters:
            - name: available_balance
              type: string
              mapping: "$.position.availableBalance"
            - name: projected_balance
              type: string
              mapping: "$.position.projectedBalance"
            - name: currency_exposure
              type: string
              mapping: "$.position.currencyExposure"
  consumes:
    - type: http
      namespace: treasury
      baseUri: "https://treasury.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.treasury_token"
      resources:
        - name: positions
          path: "/cash/positions?entity={{entity_id}}&currency={{currency}}"
          inputParameters:
            - name: entity_id
              in: query
            - name: currency
              in: query
          operations:
            - name: get-position
              method: GET

Retrieves treasury services balance reporting for corporate clients, returning opening balance, closing balance, available balance, and float for cash management.

naftiko: "0.5"
info:
  label: "Treasury Services Balance Reporting"
  description: "Retrieves treasury services balance reporting for corporate clients, returning opening balance, closing balance, available balance, and float for cash management."
  tags:
    - treasury-services
    - commercial-banking
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: ts-balance-reporting
      port: 8080
      tools:
        - name: get-balance-report
          description: "Retrieve treasury services balance report."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The treasury services account ID."
            - name: report_date
              in: body
              type: string
              description: "The report date."
          call: "ts-platform.get-balances"
          with:
            account_id: "{{account_id}}"
            report_date: "{{report_date}}"
          outputParameters:
            - name: opening_balance
              type: string
              mapping: "$.balances.openingBalance"
            - name: closing_balance
              type: string
              mapping: "$.balances.closingBalance"
            - name: available_balance
              type: string
              mapping: "$.balances.availableBalance"
            - name: float
              type: string
              mapping: "$.balances.float"
  consumes:
    - type: http
      namespace: ts-platform
      baseUri: "https://treasury-services.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.ts_platform_token"
      resources:
        - name: balances
          path: "/accounts/{{account_id}}/balances?date={{report_date}}"
          inputParameters:
            - name: account_id
              in: path
            - name: report_date
              in: query
          operations:
            - name: get-balances
              method: GET

Fetches the latest Value-at-Risk calculation for a trading book from the market risk engine. Returns VaR at 95% and 99% confidence levels, plus stressed VaR. Used by risk managers for daily limit monitoring.

naftiko: "0.5"
info:
  label: "VaR Calculation Retrieval"
  description: "Fetches the latest Value-at-Risk calculation for a trading book from the market risk engine. Returns VaR at 95% and 99% confidence levels, plus stressed VaR. Used by risk managers for daily limit monitoring."
  tags:
    - risk
    - market-risk
    - var
    - trading
capability:
  exposes:
    - type: mcp
      namespace: market-risk
      port: 8080
      tools:
        - name: get-var
          description: "Retrieve the latest VaR for a trading book by book ID. Returns VaR-95, VaR-99, stressed VaR, and calculation date."
          inputParameters:
            - name: book_id
              in: body
              type: string
              description: "The trading book identifier."
          call: "risk-engine.get-var"
          with:
            book_id: "{{book_id}}"
          outputParameters:
            - name: var_95
              type: number
              mapping: "$.var.confidence95"
            - name: var_99
              type: number
              mapping: "$.var.confidence99"
            - name: stressed_var
              type: number
              mapping: "$.var.stressedVar"
            - name: calc_date
              type: string
              mapping: "$.var.calculationDate"
  consumes:
    - type: http
      namespace: risk-engine
      baseUri: "https://risk-engine.jpmorgan.com/api/v3"
      authentication:
        type: bearer
        token: "$secrets.risk_engine_token"
      resources:
        - name: var
          path: "/books/{{book_id}}/var"
          inputParameters:
            - name: book_id
              in: path
          operations:
            - name: get-var
              method: GET

# ---------------------------------------------------------------------------
# 11. Reference Data Entity Lookup (simple)
# ---------------------------------------------------------------------------

Retrieves financial plan details for a JP Morgan private banking client, returning retirement readiness score, asset allocation, and projected wealth trajectory.

naftiko: "0.5"
info:
  label: "Wealth Client Financial Plan Lookup"
  description: "Retrieves financial plan details for a JP Morgan private banking client, returning retirement readiness score, asset allocation, and projected wealth trajectory."
  tags:
    - wealth-management
    - financial-planning
capability:
  exposes:
    - type: mcp
      namespace: financial-planning
      port: 8080
      tools:
        - name: get-financial-plan
          description: "Retrieve a wealth client financial plan."
          inputParameters:
            - name: client_id
              in: body
              type: string
              description: "The client ID."
          call: "wealth-platform.get-plan"
          with:
            client_id: "{{client_id}}"
          outputParameters:
            - name: retirement_score
              type: number
              mapping: "$.plan.retirementReadinessScore"
            - name: asset_allocation
              type: string
              mapping: "$.plan.currentAllocation"
            - name: projected_wealth
              type: string
              mapping: "$.plan.projectedWealth"
  consumes:
    - type: http
      namespace: wealth-platform
      baseUri: "https://wealth.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.wealth_token"
      resources:
        - name: plans
          path: "/clients/{{client_id}}/financial-plan"
          inputParameters:
            - name: client_id
              in: path
          operations:
            - name: get-plan
              method: GET

For a wealth management client, retrieves current portfolio positions, fetches the target model allocation, calculates rebalance trades, and submits them to the OMS. Notifies the advisor via Salesforce task.

naftiko: "0.5"
info:
  label: "Wealth Client Portfolio Rebalance"
  description: "For a wealth management client, retrieves current portfolio positions, fetches the target model allocation, calculates rebalance trades, and submits them to the OMS. Notifies the advisor via Salesforce task."
  tags:
    - wealth-management
    - portfolio
    - rebalance
    - oms
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: wealth-rebalance
      port: 8080
      tools:
        - name: rebalance-portfolio
          description: "Retrieve portfolio positions, compare to model, generate and submit rebalance trades, and notify the advisor."
          inputParameters:
            - name: portfolio_id
              in: body
              type: string
              description: "The managed portfolio identifier."
            - name: model_id
              in: body
              type: string
              description: "The target allocation model ID."
            - name: advisor_email
              in: body
              type: string
              description: "Email address of the wealth advisor."
          steps:
            - name: get-positions
              type: call
              call: "portfolio-svc.get-positions"
              with:
                portfolio_id: "{{portfolio_id}}"
            - name: get-model
              type: call
              call: "portfolio-svc.get-model"
              with:
                model_id: "{{model_id}}"
            - name: generate-trades
              type: call
              call: "rebalance-engine.calculate"
              with:
                portfolio_id: "{{portfolio_id}}"
                current_positions: "{{get-positions.positions}}"
                target_model: "{{get-model.allocations}}"
            - name: submit-trades
              type: call
              call: "oms.submit-basket"
              with:
                portfolio_id: "{{portfolio_id}}"
                trades: "{{generate-trades.tradeList}}"
            - name: notify-advisor
              type: call
              call: "salesforce.create-task"
              with:
                subject: "Rebalance completed: Portfolio {{portfolio_id}}"
                description: "{{generate-trades.tradeCount}} trades submitted. Basket ref: {{submit-trades.basketRef}}. Model: {{model_id}}."
                owner_email: "{{advisor_email}}"
  consumes:
    - type: http
      namespace: portfolio-svc
      baseUri: "https://portfolio-api.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.portfolio_api_token"
      resources:
        - name: positions
          path: "/portfolios/{{portfolio_id}}/positions"
          inputParameters:
            - name: portfolio_id
              in: path
          operations:
            - name: get-positions
              method: GET
        - name: models
          path: "/models/{{model_id}}"
          inputParameters:
            - name: model_id
              in: path
          operations:
            - name: get-model
              method: GET
    - type: http
      namespace: rebalance-engine
      baseUri: "https://rebalance-engine.jpmorgan.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.rebalance_engine_token"
      resources:
        - name: calculations
          path: "/calculate"
          operations:
            - name: calculate
              method: POST
    - type: http
      namespace: oms
      baseUri: "https://oms.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.oms_token"
      resources:
        - name: baskets
          path: "/baskets"
          operations:
            - name: submit-basket
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://jpmorgan.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: tasks
          path: "/sobjects/Task"
          operations:
            - name: create-task
              method: POST

# ---------------------------------------------------------------------------
# 21. AML Transaction Monitoring and Escalation (orchestrated)
# ---------------------------------------------------------------------------

Identifies tax-loss harvesting opportunities by scanning portfolio positions for unrealized losses, finding substitute securities that maintain factor exposure, generating sell/buy trades, and logging the harvest event for tax reporting.

naftiko: "0.5"
info:
  label: "Wealth Client Tax-Loss Harvesting"
  description: "Identifies tax-loss harvesting opportunities by scanning portfolio positions for unrealized losses, finding substitute securities that maintain factor exposure, generating sell/buy trades, and logging the harvest event for tax reporting."
  tags:
    - wealth-management
    - tax
    - portfolio
    - trading
capability:
  exposes:
    - type: mcp
      namespace: tax-loss-harvesting
      port: 8080
      tools:
        - name: harvest-losses
          description: "Scan for unrealized losses, find substitutes, generate trades, and log for tax reporting."
          inputParameters:
            - name: portfolio_id
              in: body
              type: string
              description: "The client portfolio identifier."
            - name: loss_threshold
              in: body
              type: number
              description: "Minimum unrealized loss in USD to trigger harvest."
            - name: advisor_email
              in: body
              type: string
              description: "Email of the wealth advisor."
          steps:
            - name: get-positions
              type: call
              call: "portfolio-svc.get-positions"
              with:
                portfolio_id: "{{portfolio_id}}"
            - name: identify-losses
              type: call
              call: "tax-engine.scan-losses"
              with:
                positions: "{{get-positions.positions}}"
                threshold: "{{loss_threshold}}"
            - name: find-substitutes
              type: call
              call: "tax-engine.find-substitutes"
              with:
                loss_positions: "{{identify-losses.eligiblePositions}}"
            - name: submit-trades
              type: call
              call: "oms.submit-basket"
              with:
                portfolio_id: "{{portfolio_id}}"
                trades: "{{find-substitutes.tradeList}}"
            - name: log-harvest
              type: call
              call: "tax-engine.log-harvest"
              with:
                portfolio_id: "{{portfolio_id}}"
                basket_ref: "{{submit-trades.basketRef}}"
                total_losses_harvested: "{{identify-losses.totalLoss}}"
                positions_count: "{{identify-losses.positionCount}}"
  consumes:
    - type: http
      namespace: portfolio-svc
      baseUri: "https://portfolio-api.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.portfolio_api_token"
      resources:
        - name: positions
          path: "/portfolios/{{portfolio_id}}/positions"
          inputParameters:
            - name: portfolio_id
              in: path
          operations:
            - name: get-positions
              method: GET
    - type: http
      namespace: tax-engine
      baseUri: "https://tax-engine.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.tax_engine_token"
      resources:
        - name: loss-scanning
          path: "/scan-losses"
          operations:
            - name: scan-losses
              method: POST
        - name: substitutes
          path: "/substitutes"
          operations:
            - name: find-substitutes
              method: POST
        - name: harvest-log
          path: "/harvest-log"
          operations:
            - name: log-harvest
              method: POST
    - type: http
      namespace: oms
      baseUri: "https://oms.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.oms_token"
      resources:
        - name: baskets
          path: "/baskets"
          operations:
            - name: submit-basket
              method: POST

# ---------------------------------------------------------------------------
# 50. API Gateway Rate Limit and Access Provisioning (orchestrated)
# ---------------------------------------------------------------------------

Retrieves wire transfer status from the payment hub, returning transfer state, beneficiary bank, amount, and value date for domestic and international wires.

naftiko: "0.5"
info:
  label: "Wire Transfer Status Lookup"
  description: "Retrieves wire transfer status from the payment hub, returning transfer state, beneficiary bank, amount, and value date for domestic and international wires."
  tags:
    - payments
    - wire-transfer
capability:
  exposes:
    - type: mcp
      namespace: wire-transfers
      port: 8080
      tools:
        - name: get-wire-status
          description: "Look up a wire transfer status."
          inputParameters:
            - name: reference_id
              in: body
              type: string
              description: "The wire transfer reference ID."
          call: "payment-hub.get-wire"
          with:
            reference_id: "{{reference_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.wire.status"
            - name: beneficiary_bank
              type: string
              mapping: "$.wire.beneficiaryBank"
            - name: amount
              type: string
              mapping: "$.wire.amount"
            - name: value_date
              type: string
              mapping: "$.wire.valueDate"
  consumes:
    - type: http
      namespace: payment-hub
      baseUri: "https://payment-hub.jpmorgan.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.payment_hub_token"
      resources:
        - name: wires
          path: "/wires/{{reference_id}}"
          inputParameters:
            - name: reference_id
              in: path
          operations:
            - name: get-wire
              method: GET