JP Morgan Chase Capabilities
Naftiko 0.5 capability definitions for JP Morgan Chase - 100 capabilities showing integration workflows and service orchestrations.
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}}¤cy={{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