Citigroup Capabilities
Naftiko 0.5 capability definitions for Citigroup - 100 capabilities showing integration workflows and service orchestrations.
Retrieves a transaction monitoring alert from NICE Actimize by alert ID, returning alert details, risk score, transaction data, and assigned analyst.
naftiko: "0.5"
info:
label: "Actimize Alert Lookup"
description: "Retrieves a transaction monitoring alert from NICE Actimize by alert ID, returning alert details, risk score, transaction data, and assigned analyst."
tags:
- compliance
- aml
- actimize
capability:
exposes:
- type: mcp
namespace: compliance-actimize
port: 8080
tools:
- name: get-actimize-alert
description: "Fetch a NICE Actimize alert by ID and return risk score, transaction details, and assignment."
inputParameters:
- name: alert_id
in: body
type: string
description: "The Actimize alert identifier."
call: "actimize.get-alert"
with:
alert_id: "{{alert_id}}"
consumes:
- type: http
namespace: actimize
baseUri: "https://actimize.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.actimize_token"
resources:
- name: alerts
path: "/alerts/{{alert_id}}"
inputParameters:
- name: alert_id
in: path
operations:
- name: get-alert
method: GET
Generates a Suspicious Activity Report by gathering transaction data from Actimize, retrieving customer KYC profile, and filing the report with the compliance system while notifying the BSA officer via email.
naftiko: "0.5"
info:
label: "AML Suspicious Activity Report Pipeline"
description: "Generates a Suspicious Activity Report by gathering transaction data from Actimize, retrieving customer KYC profile, and filing the report with the compliance system while notifying the BSA officer via email."
tags:
- compliance
- aml
- actimize
- kyc
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: compliance-sar
port: 8080
tools:
- name: file-sar
description: "Generate and file a Suspicious Activity Report with full case assembly."
inputParameters:
- name: alert_id
in: body
type: string
description: "The Actimize alert identifier."
- name: customer_id
in: body
type: string
description: "The customer identifier."
steps:
- name: get-alert
type: call
call: "actimize.get-alert"
with:
alert_id: "{{alert_id}}"
- name: get-kyc-profile
type: call
call: "kyc.get-profile"
with:
customer_id: "{{customer_id}}"
- name: file-report
type: call
call: "compliance.create-sar"
with:
alert_id: "{{alert_id}}"
customer_id: "{{customer_id}}"
risk_score: "{{get-alert.risk_score}}"
kyc_status: "{{get-kyc-profile.status}}"
- name: notify-bsa-officer
type: call
call: "outlook.send-mail"
with:
to: "bsa-officer@citi.com"
subject: "SAR Filed - Alert {{alert_id}}"
body: "SAR filed for customer {{customer_id}}. Risk score: {{get-alert.risk_score}}. KYC status: {{get-kyc-profile.status}}. Report ID: {{file-report.sar_id}}."
consumes:
- type: http
namespace: actimize
baseUri: "https://actimize.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.actimize_token"
resources:
- name: alerts
path: "/alerts/{{alert_id}}"
inputParameters:
- name: alert_id
in: path
operations:
- name: get-alert
method: GET
- type: http
namespace: kyc
baseUri: "https://kyc.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.kyc_token"
resources:
- name: profiles
path: "/profiles/{{customer_id}}"
inputParameters:
- name: customer_id
in: path
operations:
- name: get-profile
method: GET
- type: http
namespace: compliance
baseUri: "https://compliance.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.compliance_token"
resources:
- name: sars
path: "/sars"
operations:
- name: create-sar
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-mail
method: POST
Extracts a regulatory report dataset from Axiom SL by report ID and period, returning row count, validation status, and data summary.
naftiko: "0.5"
info:
label: "Axiom SL Report Data Extraction"
description: "Extracts a regulatory report dataset from Axiom SL by report ID and period, returning row count, validation status, and data summary."
tags:
- compliance
- regulatory-reporting
- axiom-sl
capability:
exposes:
- type: mcp
namespace: reporting-axiom
port: 8080
tools:
- name: get-axiom-report
description: "Extract a regulatory report dataset from Axiom SL for a given report ID and period."
inputParameters:
- name: report_id
in: body
type: string
description: "The Axiom SL report identifier."
- name: period
in: body
type: string
description: "The reporting period in YYYY-MM format."
call: "axiom-sl.get-report"
with:
report_id: "{{report_id}}"
period: "{{period}}"
consumes:
- type: http
namespace: axiom-sl
baseUri: "https://axiom.citi.com/controller/api/v1"
authentication:
type: bearer
token: "$secrets.axiom_sl_token"
resources:
- name: reports
path: "/reports/{{report_id}}?period={{period}}"
inputParameters:
- name: report_id
in: path
- name: period
in: query
operations:
- name: get-report
method: GET
Fetches the latest pricing data for a security from Bloomberg, checks if there are open Calypso trades for the same security, and logs a pricing snapshot in ServiceNow for audit.
naftiko: "0.5"
info:
label: "Bloomberg Security Pricing with Trade Check"
description: "Fetches the latest pricing data for a security from Bloomberg, checks if there are open Calypso trades for the same security, and logs a pricing snapshot in ServiceNow for audit."
tags:
- trading
- market-data
- bloomberg
- calypso
- servicenow
capability:
exposes:
- type: mcp
namespace: market-data
port: 8080
tools:
- name: get-security-price-with-context
description: "Retrieve Bloomberg pricing for a security, check Calypso for open positions, and log a pricing snapshot in ServiceNow."
inputParameters:
- name: ticker
in: body
type: string
description: "The Bloomberg ticker symbol (e.g., C US Equity)."
- name: desk_id
in: body
type: string
description: "The trading desk ID to check for open positions."
steps:
- name: get-pricing
type: call
call: "bloomberg.get-pricing"
with:
ticker: "{{ticker}}"
- name: check-positions
type: call
call: "calypso.get-positions"
with:
security: "{{ticker}}"
desk_id: "{{desk_id}}"
- name: log-snapshot
type: call
call: "servicenow.create-record"
with:
table: "u_pricing_snapshots"
short_description: "Price snapshot: {{ticker}} at {{get-pricing.last_price}}"
description: "Ticker: {{ticker}}. Last: {{get-pricing.last_price}}. Bid: {{get-pricing.bid}}. Ask: {{get-pricing.ask}}. Open positions on desk {{desk_id}}: {{check-positions.position_count}}."
consumes:
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: pricing
path: "/pricing/{{ticker}}"
inputParameters:
- name: ticker
in: path
operations:
- name: get-pricing
method: GET
- type: http
namespace: calypso
baseUri: "https://calypso.citi.com/calypsoserver/api/v1"
authentication:
type: bearer
token: "$secrets.calypso_token"
resources:
- name: positions
path: "/positions?security={{security}}&deskId={{desk_id}}"
inputParameters:
- name: security
in: query
- name: desk_id
in: query
operations:
- name: get-positions
method: GET
- type: http
namespace: servicenow
baseUri: "https://citi.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: table-records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Fetches real-time market data snapshot for a given security from Bloomberg Enterprise Data including price, volume, and change.
naftiko: "0.5"
info:
label: "Bloomberg Terminal Data Snapshot"
description: "Fetches real-time market data snapshot for a given security from Bloomberg Enterprise Data including price, volume, and change."
tags:
- markets
- bloomberg
capability:
exposes:
- type: mcp
namespace: markets-bloomberg
port: 8080
tools:
- name: get-market-snapshot
description: "Retrieve a real-time market data snapshot for a security from Bloomberg."
inputParameters:
- name: security_id
in: body
type: string
description: "Bloomberg security identifier."
call: "bloomberg.get-snapshot"
with:
security_id: "{{security_id}}"
consumes:
- type: http
namespace: bloomberg
baseUri: "https://bsapi.bloomberg.com/eap/catalogs/bbg/datasets"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: snapshots
path: "/snapshots/{{security_id}}"
inputParameters:
- name: security_id
in: path
operations:
- name: get-snapshot
method: GET
Retrieves the current collateral inventory from Broadridge for a given account, returning eligible securities, haircut values, and total available margin.
naftiko: "0.5"
info:
label: "Broadridge Collateral Inventory Lookup"
description: "Retrieves the current collateral inventory from Broadridge for a given account, returning eligible securities, haircut values, and total available margin."
tags:
- trading
- collateral
- broadridge
capability:
exposes:
- type: mcp
namespace: collateral-broadridge
port: 8080
tools:
- name: get-collateral-inventory
description: "Fetch collateral inventory from Broadridge for an account and collateral type."
inputParameters:
- name: account_id
in: body
type: string
description: "The Broadridge account identifier."
- name: collateral_type
in: body
type: string
description: "The collateral type filter (e.g., GOVT_BOND, EQUITY, CASH)."
call: "broadridge.get-collateral-inventory"
with:
account_id: "{{account_id}}"
collateral_type: "{{collateral_type}}"
consumes:
- type: http
namespace: broadridge
baseUri: "https://broadridge.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.broadridge_token"
resources:
- name: inventory
path: "/collateral/inventory?accountId={{account_id}}&type={{collateral_type}}"
inputParameters:
- name: account_id
in: query
- name: collateral_type
in: query
operations:
- name: get-collateral-inventory
method: GET
Retrieves a trade from the Calypso risk and trading platform by trade ID, returning deal type, notional, counterparty, and valuation.
naftiko: "0.5"
info:
label: "Calypso Trade Lookup"
description: "Retrieves a trade from the Calypso risk and trading platform by trade ID, returning deal type, notional, counterparty, and valuation."
tags:
- trading
- calypso
capability:
exposes:
- type: mcp
namespace: trading-calypso
port: 8080
tools:
- name: get-calypso-trade
description: "Fetch a Calypso trade by ID and return its deal type, notional, counterparty, and current valuation."
inputParameters:
- name: trade_id
in: body
type: string
description: "The Calypso trade identifier."
call: "calypso.get-trade"
with:
trade_id: "{{trade_id}}"
consumes:
- type: http
namespace: calypso
baseUri: "https://calypso.citi.com/calypsoserver/api/v1"
authentication:
type: bearer
token: "$secrets.calypso_token"
resources:
- name: trades
path: "/trades/{{trade_id}}"
inputParameters:
- name: trade_id
in: path
operations:
- name: get-trade
method: GET
Retrieves multi-entity cash positions from Kyriba, calculates optimal sweep amounts, and initiates internal transfers via CitiConnect to centralize liquidity.
naftiko: "0.5"
info:
label: "Cash Pooling Optimization"
description: "Retrieves multi-entity cash positions from Kyriba, calculates optimal sweep amounts, and initiates internal transfers via CitiConnect to centralize liquidity."
tags:
- treasury
- cash-management
- kyriba
- citiconnect
- cash-pooling
capability:
exposes:
- type: mcp
namespace: treasury-pooling
port: 8080
tools:
- name: optimize-cash-pool
description: "Retrieve multi-entity balances from Kyriba, calculate sweep amounts, and execute internal transfers via CitiConnect."
inputParameters:
- name: pool_id
in: body
type: string
description: "The Kyriba cash pool identifier."
- name: target_account
in: body
type: string
description: "The header account for centralized liquidity."
steps:
- name: get-pool-balances
type: call
call: "kyriba.get-pool-balances"
with:
pool_id: "{{pool_id}}"
- name: execute-sweep
type: call
call: "citiconnect.create-payment"
with:
debtor_account: "{{get-pool-balances.surplus_account}}"
beneficiary_account: "{{target_account}}"
amount: "{{get-pool-balances.surplus_amount}}"
currency: "{{get-pool-balances.currency}}"
consumes:
- type: http
namespace: kyriba
baseUri: "https://citi.kyriba.com/gateway/api/v1"
authentication:
type: bearer
token: "$secrets.kyriba_token"
resources:
- name: cash-pools
path: "/cash/pools/{{pool_id}}/balances"
inputParameters:
- name: pool_id
in: path
operations:
- name: get-pool-balances
method: GET
- type: http
namespace: citiconnect
baseUri: "https://citiconnect.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.citiconnect_token"
resources:
- name: payments
path: "/payments"
operations:
- name: create-payment
method: POST
Screens the beneficiary against Refinitiv World-Check before initiating a payment through CitiConnect, and logs the payment and screening result in ServiceNow.
naftiko: "0.5"
info:
label: "CitiConnect Payment with Sanctions Pre-Check"
description: "Screens the beneficiary against Refinitiv World-Check before initiating a payment through CitiConnect, and logs the payment and screening result in ServiceNow."
tags:
- payments
- citiconnect
- refinitiv
- servicenow
capability:
exposes:
- type: mcp
namespace: payments-citi
port: 8080
tools:
- name: initiate-screened-payment
description: "Screen the beneficiary via World-Check, submit the payment via CitiConnect, and log the result in ServiceNow."
inputParameters:
- name: beneficiary_name
in: body
type: string
description: "The beneficiary legal name for screening."
- name: beneficiary_account
in: body
type: string
description: "The beneficiary IBAN or account number."
- name: amount
in: body
type: number
description: "The payment amount."
- name: currency
in: body
type: string
description: "ISO 4217 currency code."
steps:
- name: screen-beneficiary
type: call
call: "world-check.screen-entity"
with:
entity_name: "{{beneficiary_name}}"
entity_type: "ORGANISATION"
- name: submit-payment
type: call
call: "citiconnect.create-payment"
with:
beneficiary_account: "{{beneficiary_account}}"
amount: "{{amount}}"
currency: "{{currency}}"
- name: log-payment
type: call
call: "servicenow.create-record"
with:
table: "u_payment_audit"
short_description: "Payment to {{beneficiary_name}}: {{amount}} {{currency}}"
description: "Beneficiary: {{beneficiary_name}}. Amount: {{amount}} {{currency}}. Screening: {{screen-beneficiary.match_status}}. Payment ref: {{submit-payment.payment_reference}}. UETR: {{submit-payment.uetr}}."
consumes:
- type: http
namespace: world-check
baseUri: "https://api.refinitiv.com/world-check/v2"
authentication:
type: bearer
token: "$secrets.refinitiv_token"
resources:
- name: screening
path: "/cases/screeningRequest"
operations:
- name: screen-entity
method: POST
- type: http
namespace: citiconnect
baseUri: "https://citiconnect.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.citiconnect_token"
resources:
- name: payments
path: "/payments"
operations:
- name: create-payment
method: POST
- type: http
namespace: servicenow
baseUri: "https://citi.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: table-records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Processes a client account closure by retrieving the account from Salesforce, zeroing balances in the core banking system, and creating a closure audit record in ServiceNow.
naftiko: "0.5"
info:
label: "Client Account Closure Pipeline"
description: "Processes a client account closure by retrieving the account from Salesforce, zeroing balances in the core banking system, and creating a closure audit record in ServiceNow."
tags:
- client-services
- salesforce
- core-banking
- servicenow
capability:
exposes:
- type: mcp
namespace: client-services
port: 8080
tools:
- name: close-client-account
description: "Process a full client account closure across Salesforce, core banking, and ServiceNow audit."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account identifier."
- name: reason
in: body
type: string
description: "The closure reason."
steps:
- name: get-account
type: call
call: "salesforce.get-account"
with:
account_id: "{{account_id}}"
- name: close-banking
type: call
call: "core-banking.close-account"
with:
account_id: "{{account_id}}"
reason: "{{reason}}"
- name: create-audit
type: call
call: "servicenow.create-record"
with:
table: "u_account_closures"
account_id: "{{account_id}}"
client_name: "{{get-account.Name}}"
reason: "{{reason}}"
closure_status: "{{close-banking.status}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://citi.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: core-banking
baseUri: "https://core-banking.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.core_banking_token"
resources:
- name: accounts
path: "/accounts/{{account_id}}/close"
inputParameters:
- name: account_id
in: path
operations:
- name: close-account
method: POST
- type: http
namespace: servicenow
baseUri: "https://citi.service-now.com/api/now/table"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: records
path: "/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Handles client complaints by creating a case in Pega, pulling client history from Salesforce, and assigning to the appropriate resolution team with SLA tracking via ServiceNow.
naftiko: "0.5"
info:
label: "Client Complaint Resolution Pipeline"
description: "Handles client complaints by creating a case in Pega, pulling client history from Salesforce, and assigning to the appropriate resolution team with SLA tracking via ServiceNow."
tags:
- client-services
- pega
- salesforce
- servicenow
capability:
exposes:
- type: mcp
namespace: complaints
port: 8080
tools:
- name: process-complaint
description: "Create complaint case with client context and SLA assignment."
inputParameters:
- name: client_id
in: body
type: string
description: "The Salesforce client identifier."
- name: complaint_text
in: body
type: string
description: "The complaint description."
- name: category
in: body
type: string
description: "The complaint category."
steps:
- name: get-client
type: call
call: "salesforce.get-account"
with:
account_id: "{{client_id}}"
- name: create-case
type: call
call: "pega.create-case"
with:
case_type: "ClientComplaint"
client_name: "{{get-client.Name}}"
client_segment: "{{get-client.Segment__c}}"
complaint: "{{complaint_text}}"
category: "{{category}}"
- name: create-sla-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Complaint: {{category}} - {{get-client.Name}}"
description: "{{complaint_text}}"
urgency: "2"
assignment_group: "complaint_resolution"
consumes:
- type: http
namespace: salesforce
baseUri: "https://citi.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: pega
baseUri: "https://pega.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.pega_token"
resources:
- name: cases
path: "/cases"
operations:
- name: create-case
method: POST
- type: http
namespace: servicenow
baseUri: "https://citi.service-now.com/api/now/table"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/incident"
operations:
- name: create-incident
method: POST
Opens a new institutional client case in Pegasystems, provisions a Salesforce CRM account, triggers KYC screening in Refinitiv, and notifies the coverage team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Client Onboarding Orchestrator"
description: "Opens a new institutional client case in Pegasystems, provisions a Salesforce CRM account, triggers KYC screening in Refinitiv, and notifies the coverage team in Microsoft Teams."
tags:
- corporate-banking
- onboarding
- pega
- salesforce
- refinitiv
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: client-onboarding
port: 8080
tools:
- name: onboard-institutional-client
description: "Orchestrate institutional client onboarding across Pega, Salesforce, Refinitiv World-Check, and Microsoft Teams."
inputParameters:
- name: client_name
in: body
type: string
description: "The legal name of the institutional client."
- name: entity_type
in: body
type: string
description: "Entity type: CORPORATE, FUND, SOVEREIGN, FI."
- name: coverage_team_email
in: body
type: string
description: "Coverage team email for Teams notification."
steps:
- name: create-case
type: call
call: "pega.create-case"
with:
case_type: "ClientOnboarding"
client_name: "{{client_name}}"
entity_type: "{{entity_type}}"
- name: create-crm-account
type: call
call: "salesforce.create-account"
with:
name: "{{client_name}}"
type: "{{entity_type}}"
pega_case_id: "{{create-case.case_id}}"
- name: screen-client
type: call
call: "world-check.screen-entity"
with:
entity_name: "{{client_name}}"
entity_type: "{{entity_type}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{coverage_team_email}}"
text: "New client onboarding initiated for {{client_name}} ({{entity_type}}). Pega case: {{create-case.case_id}}. Salesforce ID: {{create-crm-account.account_id}}. Screening status: {{screen-client.match_status}}."
consumes:
- type: http
namespace: pega
baseUri: "https://pega.citi.com/prweb/api/v1"
authentication:
type: bearer
token: "$secrets.pega_token"
resources:
- name: cases
path: "/cases"
operations:
- name: create-case
method: POST
- type: http
namespace: salesforce
baseUri: "https://citi.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account"
operations:
- name: create-account
method: POST
- type: http
namespace: world-check
baseUri: "https://api.refinitiv.com/world-check/v2"
authentication:
type: bearer
token: "$secrets.refinitiv_token"
resources:
- name: screening
path: "/cases/screeningRequest"
operations:
- name: screen-entity
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
Refreshes a client risk rating by pulling the latest screening from Refinitiv World-Check, credit data from Moody's RiskAuthority, and updating the Pega KYC case with the new composite score.
naftiko: "0.5"
info:
label: "Client Risk Rating Refresh"
description: "Refreshes a client risk rating by pulling the latest screening from Refinitiv World-Check, credit data from Moody's RiskAuthority, and updating the Pega KYC case with the new composite score."
tags:
- compliance
- risk
- refinitiv
- moodys
- pega
capability:
exposes:
- type: mcp
namespace: compliance-risk-rating
port: 8080
tools:
- name: refresh-client-risk-rating
description: "Refresh a client's composite risk rating using World-Check screening, RiskAuthority credit data, and update the Pega KYC case."
inputParameters:
- name: client_id
in: body
type: string
description: "The internal client identifier."
- name: case_id
in: body
type: string
description: "The Pega KYC case identifier."
steps:
- name: get-case
type: call
call: "pega.get-case"
with:
case_id: "{{case_id}}"
- name: screen-client
type: call
call: "world-check.screen-entity"
with:
entity_name: "{{get-case.client_name}}"
entity_type: "{{get-case.entity_type}}"
- name: get-credit-data
type: call
call: "riskauthority.get-exposure"
with:
counterparty_id: "{{client_id}}"
- name: update-rating
type: call
call: "pega.update-case"
with:
case_id: "{{case_id}}"
screening_result: "{{screen-client.match_status}}"
credit_rating: "{{get-credit-data.internal_rating}}"
pd: "{{get-credit-data.pd}}"
consumes:
- type: http
namespace: pega
baseUri: "https://pega.citi.com/prweb/api/v1"
authentication:
type: bearer
token: "$secrets.pega_token"
resources:
- name: cases
path: "/cases/{{case_id}}"
inputParameters:
- name: case_id
in: path
operations:
- name: get-case
method: GET
- name: update-case
method: PUT
- type: http
namespace: world-check
baseUri: "https://api.refinitiv.com/world-check/v2"
authentication:
type: bearer
token: "$secrets.refinitiv_token"
resources:
- name: screening
path: "/cases/screeningRequest"
operations:
- name: screen-entity
method: POST
- type: http
namespace: riskauthority
baseUri: "https://riskauthority.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.riskauthority_token"
resources:
- name: exposures
path: "/exposures/counterparty/{{counterparty_id}}"
inputParameters:
- name: counterparty_id
in: path
operations:
- name: get-exposure
method: GET
Generates client tax documents by extracting portfolio positions from Calypso, calculating tax lots, and storing the completed document in OpenText with email notification to the client.
naftiko: "0.5"
info:
label: "Client Tax Document Generation Pipeline"
description: "Generates client tax documents by extracting portfolio positions from Calypso, calculating tax lots, and storing the completed document in OpenText with email notification to the client."
tags:
- tax
- calypso
- opentext
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: tax-docs
port: 8080
tools:
- name: generate-tax-document
description: "Generate tax documents from portfolio data with storage and client notification."
inputParameters:
- name: client_id
in: body
type: string
description: "The client identifier."
- name: tax_year
in: body
type: string
description: "The tax year."
steps:
- name: get-positions
type: call
call: "calypso.get-positions"
with:
client_id: "{{client_id}}"
as_of_date: "{{tax_year}}-12-31"
- name: generate-doc
type: call
call: "tax-engine.generate-document"
with:
client_id: "{{client_id}}"
tax_year: "{{tax_year}}"
positions: "{{get-positions.positions}}"
- name: store-document
type: call
call: "opentext.upload-document"
with:
folder: "/tax/{{tax_year}}/{{client_id}}"
document_id: "{{generate-doc.document_id}}"
- name: email-client
type: call
call: "outlook.send-mail"
with:
to: "{{get-positions.client_email}}"
subject: "Your {{tax_year}} Tax Document is Ready"
body: "Your tax document for {{tax_year}} has been generated. Document ref: {{generate-doc.document_id}}."
consumes:
- type: http
namespace: calypso
baseUri: "https://calypso.citi.com/api/v4"
authentication:
type: bearer
token: "$secrets.calypso_token"
resources:
- name: positions
path: "/positions"
operations:
- name: get-positions
method: GET
- type: http
namespace: tax-engine
baseUri: "https://tax-engine.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.tax_engine_token"
resources:
- name: documents
path: "/documents"
operations:
- name: generate-document
method: POST
- type: http
namespace: opentext
baseUri: "https://opentext.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.opentext_token"
resources:
- name: documents
path: "/documents"
operations:
- name: upload-document
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-mail
method: POST
Retrieves FX settlement instruction status from CLS Group by instruction reference.
naftiko: "0.5"
info:
label: "CLS Settlement Instruction Lookup"
description: "Retrieves FX settlement instruction status from CLS Group by instruction reference."
tags:
- forex
- cls
- settlements
capability:
exposes:
- type: mcp
namespace: fx-settlements
port: 8080
tools:
- name: get-cls-instruction
description: "Look up CLS FX settlement instruction status."
inputParameters:
- name: instruction_ref
in: body
type: string
description: "The CLS instruction reference."
call: "cls.get-instruction"
with:
instruction_ref: "{{instruction_ref}}"
consumes:
- type: http
namespace: cls
baseUri: "https://api.cls-group.com/v1"
authentication:
type: bearer
token: "$secrets.cls_token"
resources:
- name: instructions
path: "/instructions/{{instruction_ref}}"
inputParameters:
- name: instruction_ref
in: path
operations:
- name: get-instruction
method: GET
Retrieves margin call details from Calypso, checks collateral inventory in Broadridge, and posts the margin movement instruction, notifying the collateral desk via Teams.
naftiko: "0.5"
info:
label: "Collateral Margin Call Processor"
description: "Retrieves margin call details from Calypso, checks collateral inventory in Broadridge, and posts the margin movement instruction, notifying the collateral desk via Teams."
tags:
- trading
- collateral
- calypso
- broadridge
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: collateral-mgmt
port: 8080
tools:
- name: process-margin-call
description: "Process a margin call by checking Calypso exposure, validating Broadridge collateral inventory, and notifying the collateral desk."
inputParameters:
- name: margin_call_id
in: body
type: string
description: "The Calypso margin call identifier."
- name: desk_email
in: body
type: string
description: "The collateral desk email for Teams notification."
steps:
- name: get-margin-call
type: call
call: "calypso.get-margin-call"
with:
margin_call_id: "{{margin_call_id}}"
- name: check-inventory
type: call
call: "broadridge.get-collateral-inventory"
with:
account_id: "{{get-margin-call.account_id}}"
collateral_type: "{{get-margin-call.eligible_collateral}}"
- name: post-movement
type: call
call: "broadridge.create-collateral-movement"
with:
margin_call_id: "{{margin_call_id}}"
amount: "{{get-margin-call.call_amount}}"
currency: "{{get-margin-call.currency}}"
- name: notify-desk
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{desk_email}}"
text: "Margin call {{margin_call_id}} processed. Amount: {{get-margin-call.call_amount}} {{get-margin-call.currency}}. Counterparty: {{get-margin-call.counterparty}}. Movement ref: {{post-movement.movement_id}}."
consumes:
- type: http
namespace: calypso
baseUri: "https://calypso.citi.com/calypsoserver/api/v1"
authentication:
type: bearer
token: "$secrets.calypso_token"
resources:
- name: margin-calls
path: "/margin-calls/{{margin_call_id}}"
inputParameters:
- name: margin_call_id
in: path
operations:
- name: get-margin-call
method: GET
- type: http
namespace: broadridge
baseUri: "https://broadridge.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.broadridge_token"
resources:
- name: inventory
path: "/collateral/inventory?accountId={{account_id}}&type={{collateral_type}}"
inputParameters:
- name: account_id
in: query
- name: collateral_type
in: query
operations:
- name: get-collateral-inventory
method: GET
- name: movements
path: "/collateral/movements"
operations:
- name: create-collateral-movement
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
Reconciles commercial card expenses by fetching transactions from the card platform, matching against SAP expense reports, and routing discrepancies to the finance team via Pega.
naftiko: "0.5"
info:
label: "Commercial Card Expense Reconciliation Pipeline"
description: "Reconciles commercial card expenses by fetching transactions from the card platform, matching against SAP expense reports, and routing discrepancies to the finance team via Pega."
tags:
- finance
- commercial-cards
- sap
- pega
capability:
exposes:
- type: mcp
namespace: card-reconciliation
port: 8080
tools:
- name: reconcile-card-expenses
description: "Reconcile commercial card transactions against SAP expense reports."
inputParameters:
- name: billing_cycle
in: body
type: string
description: "The billing cycle identifier."
- name: cost_center
in: body
type: string
description: "The cost center code."
steps:
- name: get-transactions
type: call
call: "card-platform.get-transactions"
with:
billing_cycle: "{{billing_cycle}}"
cost_center: "{{cost_center}}"
- name: match-expenses
type: call
call: "sap.match-expenses"
with:
transactions: "{{get-transactions.transactions}}"
cost_center: "{{cost_center}}"
- name: route-discrepancies
type: call
call: "pega.create-case"
with:
case_type: "ExpenseDiscrepancy"
cost_center: "{{cost_center}}"
unmatched_count: "{{match-expenses.unmatched_count}}"
total_discrepancy: "{{match-expenses.discrepancy_amount}}"
consumes:
- type: http
namespace: card-platform
baseUri: "https://cards.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.card_platform_token"
resources:
- name: transactions
path: "/transactions"
operations:
- name: get-transactions
method: GET
- type: http
namespace: sap
baseUri: "https://sap.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: expense-matching
path: "/expenses/match"
operations:
- name: match-expenses
method: POST
- type: http
namespace: pega
baseUri: "https://pega.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.pega_token"
resources:
- name: cases
path: "/cases"
operations:
- name: create-case
method: POST
Searches Confluence for internal policy documents by keyword, returning document title, URL, and last updated timestamp.
naftiko: "0.5"
info:
label: "Confluence Policy Document Search"
description: "Searches Confluence for internal policy documents by keyword, returning document title, URL, and last updated timestamp."
tags:
- knowledge-management
- confluence
capability:
exposes:
- type: mcp
namespace: km-confluence
port: 8080
tools:
- name: search-policies
description: "Search Confluence for internal policy documents."
inputParameters:
- name: keyword
in: body
type: string
description: "The search keyword."
call: "confluence.search-content"
with:
cql: "type=page AND space=POL AND text~'{{keyword}}'"
consumes:
- type: http
namespace: confluence
baseUri: "https://citi.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: search
path: "/content/search"
operations:
- name: search-content
method: GET
Manages corporate bond issuance by pricing the bond in Bloomberg, booking the deal in Calypso, and distributing allocation notices to investors via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Corporate Bond Issuance Pipeline"
description: "Manages corporate bond issuance by pricing the bond in Bloomberg, booking the deal in Calypso, and distributing allocation notices to investors via Microsoft Outlook."
tags:
- capital-markets
- bloomberg
- calypso
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: capital-markets
port: 8080
tools:
- name: process-bond-issuance
description: "Price, book, and notify on a corporate bond issuance."
inputParameters:
- name: issuer_name
in: body
type: string
description: "The bond issuer name."
- name: face_value
in: body
type: number
description: "The bond face value."
- name: coupon_rate
in: body
type: number
description: "The coupon rate."
- name: maturity_years
in: body
type: number
description: "Years to maturity."
steps:
- name: price-bond
type: call
call: "bloomberg.price-bond"
with:
issuer: "{{issuer_name}}"
face_value: "{{face_value}}"
coupon: "{{coupon_rate}}"
maturity: "{{maturity_years}}"
- name: book-deal
type: call
call: "calypso.create-trade"
with:
product_type: "bond_issuance"
issuer: "{{issuer_name}}"
face_value: "{{face_value}}"
coupon: "{{coupon_rate}}"
price: "{{price-bond.clean_price}}"
- name: send-allocations
type: call
call: "outlook.send-mail"
with:
to: "{{book-deal.investor_distribution_list}}"
subject: "Bond Allocation - {{issuer_name}} {{coupon_rate}}% {{maturity_years}}Y"
body: "Allocation confirmed. Face value: {{face_value}}, Price: {{price-bond.clean_price}}, Yield: {{price-bond.yield}}%. Deal ref: {{book-deal.trade_id}}."
consumes:
- type: http
namespace: bloomberg
baseUri: "https://bsapi.bloomberg.com/eap/catalogs/bbg"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: pricing
path: "/pricing/bonds"
operations:
- name: price-bond
method: POST
- type: http
namespace: calypso
baseUri: "https://calypso.citi.com/api/v4"
authentication:
type: bearer
token: "$secrets.calypso_token"
resources:
- name: trades
path: "/trades"
operations:
- name: create-trade
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-mail
method: POST
Processes a loan drawdown request by validating facility limits in Loan IQ, booking the disbursement, and notifying the relationship manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "Corporate Loan Drawdown Request"
description: "Processes a loan drawdown request by validating facility limits in Loan IQ, booking the disbursement, and notifying the relationship manager via Microsoft Teams."
tags:
- corporate-banking
- lending
- loan-iq
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: lending
port: 8080
tools:
- name: process-drawdown
description: "Validate a drawdown against Loan IQ facility limits, book the disbursement, and notify the RM in Microsoft Teams."
inputParameters:
- name: facility_id
in: body
type: string
description: "The Loan IQ facility identifier."
- name: drawdown_amount
in: body
type: number
description: "The requested drawdown amount."
- name: currency
in: body
type: string
description: "ISO 4217 currency code."
- name: rm_email
in: body
type: string
description: "Relationship manager email for Teams notification."
steps:
- name: get-facility
type: call
call: "loan-iq.get-facility"
with:
facility_id: "{{facility_id}}"
- name: book-drawdown
type: call
call: "loan-iq.create-drawdown"
with:
facility_id: "{{facility_id}}"
amount: "{{drawdown_amount}}"
currency: "{{currency}}"
- name: notify-rm
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{rm_email}}"
text: "Drawdown processed on facility {{facility_id}} for {{drawdown_amount}} {{currency}}. Available limit: {{get-facility.available_amount}}. Drawdown ref: {{book-drawdown.drawdown_id}}."
consumes:
- type: http
namespace: loan-iq
baseUri: "https://loaniq.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.loaniq_token"
resources:
- name: facilities
path: "/facilities/{{facility_id}}"
inputParameters:
- name: facility_id
in: path
operations:
- name: get-facility
method: GET
- name: drawdowns
path: "/facilities/{{facility_id}}/drawdowns"
inputParameters:
- name: facility_id
in: path
operations:
- name: create-drawdown
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Retrieves a pending payment from CitiConnect, validates the payee against World-Check sanctions screening, gets manager approval from Workday hierarchy, and releases the payment.
naftiko: "0.5"
info:
label: "Corporate Payment Approval Pipeline"
description: "Retrieves a pending payment from CitiConnect, validates the payee against World-Check sanctions screening, gets manager approval from Workday hierarchy, and releases the payment."
tags:
- payments
- approval
- citiconnect
- refinitiv
- workday
capability:
exposes:
- type: mcp
namespace: payments-approval
port: 8080
tools:
- name: approve-corporate-payment
description: "Screen a pending CitiConnect payment against sanctions, validate approver via Workday, and release the payment."
inputParameters:
- name: payment_id
in: body
type: string
description: "The CitiConnect pending payment identifier."
- name: approver_worker_id
in: body
type: string
description: "The Workday worker ID of the approver."
steps:
- name: get-payment
type: call
call: "citiconnect.get-payment"
with:
payment_id: "{{payment_id}}"
- name: screen-beneficiary
type: call
call: "world-check.screen-entity"
with:
entity_name: "{{get-payment.beneficiary_name}}"
entity_type: "ORGANISATION"
- name: get-approver
type: call
call: "workday.get-worker"
with:
worker_id: "{{approver_worker_id}}"
- name: release-payment
type: call
call: "citiconnect.release-payment"
with:
payment_id: "{{payment_id}}"
approved_by: "{{get-approver.full_name}}"
consumes:
- type: http
namespace: citiconnect
baseUri: "https://citiconnect.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.citiconnect_token"
resources:
- name: payments
path: "/payments/{{payment_id}}"
inputParameters:
- name: payment_id
in: path
operations:
- name: get-payment
method: GET
- name: release-payment
method: POST
- type: http
namespace: world-check
baseUri: "https://api.refinitiv.com/world-check/v2"
authentication:
type: bearer
token: "$secrets.refinitiv_token"
resources:
- name: screening
path: "/cases/screeningRequest"
operations:
- name: screen-entity
method: POST
- 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
Conducts due diligence on a correspondent bank by screening in Refinitiv World-Check, pulling financials from Bloomberg, and creating a review case in Pega.
naftiko: "0.5"
info:
label: "Correspondent Banking Due Diligence Pipeline"
description: "Conducts due diligence on a correspondent bank by screening in Refinitiv World-Check, pulling financials from Bloomberg, and creating a review case in Pega."
tags:
- compliance
- correspondent-banking
- refinitiv
- bloomberg
- pega
capability:
exposes:
- type: mcp
namespace: cdd-pipeline
port: 8080
tools:
- name: conduct-cdd
description: "Run correspondent banking due diligence with screening, financials, and case creation."
inputParameters:
- name: bank_name
in: body
type: string
description: "The correspondent bank name."
- name: swift_code
in: body
type: string
description: "The SWIFT/BIC code."
steps:
- name: screen-bank
type: call
call: "refinitiv.screen-entity"
with:
entity_name: "{{bank_name}}"
entity_type: "financial_institution"
- name: get-financials
type: call
call: "bloomberg.get-financials"
with:
entity_name: "{{bank_name}}"
- name: create-review
type: call
call: "pega.create-case"
with:
case_type: "CorrespondentBankReview"
bank_name: "{{bank_name}}"
swift_code: "{{swift_code}}"
screening_result: "{{screen-bank.match_status}}"
total_assets: "{{get-financials.total_assets}}"
consumes:
- type: http
namespace: refinitiv
baseUri: "https://api.refinitiv.com/worldcheck/v2"
authentication:
type: bearer
token: "$secrets.refinitiv_wc_token"
resources:
- name: screening
path: "/screening"
operations:
- name: screen-entity
method: POST
- type: http
namespace: bloomberg
baseUri: "https://bsapi.bloomberg.com/eap/catalogs/bbg"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: financials
path: "/datasets/financials"
operations:
- name: get-financials
method: GET
- type: http
namespace: pega
baseUri: "https://pega.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.pega_token"
resources:
- name: cases
path: "/cases"
operations:
- name: create-case
method: POST
Checks a counterparty's credit limit utilization in Moody's RiskAuthority against a proposed trade notional from Murex, and flags breaches to risk management.
naftiko: "0.5"
info:
label: "Counterparty Credit Limit Check"
description: "Checks a counterparty's credit limit utilization in Moody's RiskAuthority against a proposed trade notional from Murex, and flags breaches to risk management."
tags:
- risk
- credit-risk
- moodys
- murex
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: risk-limit-check
port: 8080
tools:
- name: check-credit-limit
description: "Validate a proposed Murex trade against RiskAuthority credit limits and alert risk management if the limit would be breached."
inputParameters:
- name: trade_id
in: body
type: string
description: "The Murex trade identifier for the proposed trade."
- name: risk_manager_email
in: body
type: string
description: "Risk manager email for breach notification."
steps:
- name: get-trade
type: call
call: "murex.get-trade"
with:
trade_id: "{{trade_id}}"
- name: get-exposure
type: call
call: "riskauthority.get-exposure"
with:
counterparty_id: "{{get-trade.counterparty_id}}"
- name: notify-risk
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{risk_manager_email}}"
text: "Credit limit check: Trade {{trade_id}} with {{get-trade.counterparty}} for {{get-trade.notional}} {{get-trade.currency}}. Current utilization: {{get-exposure.utilization_pct}}%. Available limit: {{get-exposure.available_limit}}."
consumes:
- type: http
namespace: murex
baseUri: "https://murex.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.murex_token"
resources:
- name: trades
path: "/trades/{{trade_id}}"
inputParameters:
- name: trade_id
in: path
operations:
- name: get-trade
method: GET
- type: http
namespace: riskauthority
baseUri: "https://riskauthority.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.riskauthority_token"
resources:
- name: exposures
path: "/exposures/counterparty/{{counterparty_id}}"
inputParameters:
- name: counterparty_id
in: path
operations:
- name: get-exposure
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Manages credit facility renewals by pulling facility details from LoanIQ, refreshing the credit rating from Moody's, and submitting the renewal for approval in Pega with relationship manager notification.
naftiko: "0.5"
info:
label: "Credit Facility Renewal Pipeline"
description: "Manages credit facility renewals by pulling facility details from LoanIQ, refreshing the credit rating from Moody's, and submitting the renewal for approval in Pega with relationship manager notification."
tags:
- lending
- loan-iq
- moodys
- pega
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: lending-renewals
port: 8080
tools:
- name: renew-credit-facility
description: "Process credit facility renewal with rating refresh and approval routing."
inputParameters:
- name: facility_id
in: body
type: string
description: "The LoanIQ facility identifier."
steps:
- name: get-facility
type: call
call: "loaniq.get-facility"
with:
facility_id: "{{facility_id}}"
- name: refresh-rating
type: call
call: "moodys.get-rating"
with:
entity_id: "{{get-facility.borrower_id}}"
- name: submit-renewal
type: call
call: "pega.create-case"
with:
case_type: "FacilityRenewal"
facility_id: "{{facility_id}}"
borrower: "{{get-facility.borrower_name}}"
current_rating: "{{refresh-rating.rating}}"
outstanding: "{{get-facility.outstanding_balance}}"
- name: notify-rm
type: call
call: "msteams.send-channel-message"
with:
team_id: "lending"
channel_id: "renewals"
text: "Facility {{facility_id}} renewal submitted. Borrower: {{get-facility.borrower_name}}. Rating: {{refresh-rating.rating}} ({{refresh-rating.outlook}}). Outstanding: {{get-facility.outstanding_balance}}. Case: {{submit-renewal.case_id}}."
consumes:
- type: http
namespace: loaniq
baseUri: "https://loaniq.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.loaniq_token"
resources:
- name: facilities
path: "/facilities/{{facility_id}}"
inputParameters:
- name: facility_id
in: path
operations:
- name: get-facility
method: GET
- type: http
namespace: moodys
baseUri: "https://api.moodys.com/v1"
authentication:
type: bearer
token: "$secrets.moodys_token"
resources:
- name: ratings
path: "/ratings/{{entity_id}}"
inputParameters:
- name: entity_id
in: path
operations:
- name: get-rating
method: GET
- type: http
namespace: pega
baseUri: "https://pega.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.pega_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: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Handles a credit limit breach by retrieving the counterparty exposure from Calypso, logging the breach in the risk system, and escalating to the credit committee via Microsoft Teams.
naftiko: "0.5"
info:
label: "Credit Limit Breach Handler"
description: "Handles a credit limit breach by retrieving the counterparty exposure from Calypso, logging the breach in the risk system, and escalating to the credit committee via Microsoft Teams."
tags:
- credit-risk
- calypso
- risk-management
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: credit-risk
port: 8080
tools:
- name: handle-credit-breach
description: "Process a credit limit breach with exposure lookup, risk logging, and escalation."
inputParameters:
- name: counterparty_id
in: body
type: string
description: "The counterparty identifier."
steps:
- name: get-exposure
type: call
call: "calypso.get-exposure"
with:
counterparty_id: "{{counterparty_id}}"
- name: log-breach
type: call
call: "risk-system.create-breach"
with:
counterparty_id: "{{counterparty_id}}"
current_exposure: "{{get-exposure.total_exposure}}"
credit_limit: "{{get-exposure.credit_limit}}"
- name: escalate
type: call
call: "msteams.send-channel-message"
with:
team_id: "credit_risk"
channel_id: "breaches"
text: "CREDIT LIMIT BREACH: Counterparty {{counterparty_id}}. Exposure: {{get-exposure.total_exposure}} vs Limit: {{get-exposure.credit_limit}}. Breach ref: {{log-breach.breach_id}}."
consumes:
- type: http
namespace: calypso
baseUri: "https://calypso.citi.com/api/v4"
authentication:
type: bearer
token: "$secrets.calypso_token"
resources:
- name: exposures
path: "/exposures/{{counterparty_id}}"
inputParameters:
- name: counterparty_id
in: path
operations:
- name: get-exposure
method: GET
- type: http
namespace: risk-system
baseUri: "https://risk.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.risk_token"
resources:
- name: breaches
path: "/breaches"
operations:
- name: create-breach
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Pulls credit exposure data from Moody's Analytics RiskAuthority for a given counterparty, enriches with Salesforce CRM account data, and logs a summary to ServiceNow for risk oversight.
naftiko: "0.5"
info:
label: "Credit Risk Exposure Snapshot"
description: "Pulls credit exposure data from Moody's Analytics RiskAuthority for a given counterparty, enriches with Salesforce CRM account data, and logs a summary to ServiceNow for risk oversight."
tags:
- risk
- credit-risk
- moodys
- riskauthority
- salesforce
- servicenow
capability:
exposes:
- type: mcp
namespace: risk-credit
port: 8080
tools:
- name: get-credit-exposure
description: "Retrieve credit exposure metrics from RiskAuthority, enrich with Salesforce client data, and log a risk summary in ServiceNow."
inputParameters:
- name: counterparty_id
in: body
type: string
description: "The internal counterparty identifier."
- name: sf_account_id
in: body
type: string
description: "The Salesforce account ID for the counterparty."
steps:
- name: get-exposure
type: call
call: "riskauthority.get-exposure"
with:
counterparty_id: "{{counterparty_id}}"
- name: get-account
type: call
call: "salesforce.get-account"
with:
account_id: "{{sf_account_id}}"
- name: log-snapshot
type: call
call: "servicenow.create-record"
with:
table: "u_credit_risk_snapshots"
short_description: "Credit snapshot: {{get-account.name}} — PD {{get-exposure.pd}}"
description: "Counterparty {{counterparty_id}} ({{get-account.name}}). Exposure: {{get-exposure.current_exposure}}. PD: {{get-exposure.pd}}. LGD: {{get-exposure.lgd}}. Utilization: {{get-exposure.utilization_pct}}%."
consumes:
- type: http
namespace: riskauthority
baseUri: "https://riskauthority.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.riskauthority_token"
resources:
- name: exposures
path: "/exposures/counterparty/{{counterparty_id}}"
inputParameters:
- name: counterparty_id
in: path
operations:
- name: get-exposure
method: GET
- type: http
namespace: salesforce
baseUri: "https://citi.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: servicenow
baseUri: "https://citi.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: table-records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Initiates a cross-border wire via CitiConnect, tracks it through SWIFT gpi, and notifies the originating operations team in Microsoft Teams with confirmation details.
naftiko: "0.5"
info:
label: "Cross-Border Payment Orchestrator"
description: "Initiates a cross-border wire via CitiConnect, tracks it through SWIFT gpi, and notifies the originating operations team in Microsoft Teams with confirmation details."
tags:
- payments
- cross-border
- citiconnect
- swift
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: payments-crossborder
port: 8080
tools:
- name: initiate-cross-border-payment
description: "Submit a cross-border payment via CitiConnect, track SWIFT gpi settlement, and notify operations in Microsoft Teams."
inputParameters:
- name: payment_reference
in: body
type: string
description: "The internal payment reference number."
- name: beneficiary_account
in: body
type: string
description: "The beneficiary IBAN or account number."
- name: amount
in: body
type: number
description: "The payment amount."
- name: currency
in: body
type: string
description: "ISO 4217 currency code."
- name: ops_email
in: body
type: string
description: "The operations team email for Teams notification."
steps:
- name: submit-payment
type: call
call: "citiconnect.create-payment"
with:
payment_reference: "{{payment_reference}}"
beneficiary_account: "{{beneficiary_account}}"
amount: "{{amount}}"
currency: "{{currency}}"
- name: track-payment
type: call
call: "swift-gpi.get-payment-status"
with:
uetr: "{{submit-payment.uetr}}"
- name: notify-ops
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{ops_email}}"
text: "Cross-border payment {{payment_reference}} submitted. UETR: {{submit-payment.uetr}}. Amount: {{amount}} {{currency}}. SWIFT status: {{track-payment.transaction_status}}."
consumes:
- type: http
namespace: citiconnect
baseUri: "https://citiconnect.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.citiconnect_token"
resources:
- name: payments
path: "/payments"
operations:
- name: create-payment
method: POST
- type: http
namespace: swift-gpi
baseUri: "https://api.swiftnet.sipn.swift.com/gpi/v4"
authentication:
type: bearer
token: "$secrets.swift_gpi_token"
resources:
- name: payment-transactions
path: "/payment_transactions/{{uetr}}"
inputParameters:
- name: uetr
in: path
operations:
- name: get-payment-status
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Services a custody corporate action by retrieving event details from Broadridge, instructing the election in the custody system, and notifying the asset servicing team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Custody Asset Servicing Pipeline"
description: "Services a custody corporate action by retrieving event details from Broadridge, instructing the election in the custody system, and notifying the asset servicing team via Microsoft Teams."
tags:
- custody
- broadridge
- corporate-actions
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: custody-servicing
port: 8080
tools:
- name: process-corporate-action
description: "Process a corporate action election for custody clients."
inputParameters:
- name: event_id
in: body
type: string
description: "The corporate action event identifier."
- name: election
in: body
type: string
description: "The client election choice."
steps:
- name: get-event
type: call
call: "broadridge.get-corporate-action"
with:
event_id: "{{event_id}}"
- name: submit-election
type: call
call: "custody.submit-election"
with:
event_id: "{{event_id}}"
election: "{{election}}"
security_id: "{{get-event.security_id}}"
- name: notify-team
type: call
call: "msteams.send-channel-message"
with:
team_id: "custody"
channel_id: "corporate_actions"
text: "Corporate action {{event_id}} processed. Security: {{get-event.security_id}}. Event type: {{get-event.event_type}}. Election: {{election}}. Status: {{submit-election.status}}."
consumes:
- type: http
namespace: broadridge
baseUri: "https://broadridge.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.broadridge_token"
resources:
- name: corporate-actions
path: "/corporate-actions/{{event_id}}"
inputParameters:
- name: event_id
in: path
operations:
- name: get-corporate-action
method: GET
- type: http
namespace: custody
baseUri: "https://custody.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.custody_token"
resources:
- name: elections
path: "/elections"
operations:
- name: submit-election
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Generates daily liquidity reports by aggregating cash positions from Kyriba, computing LCR metrics, and distributing the report to senior management via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Daily Liquidity Reporting Pipeline"
description: "Generates daily liquidity reports by aggregating cash positions from Kyriba, computing LCR metrics, and distributing the report to senior management via Microsoft Outlook."
tags:
- treasury
- kyriba
- regulatory
- microsoft-outlook
- liquidity
capability:
exposes:
- type: mcp
namespace: liquidity-reporting
port: 8080
tools:
- name: generate-liquidity-report
description: "Aggregate positions, compute LCR, and distribute the daily liquidity report."
inputParameters:
- name: report_date
in: body
type: string
description: "The report date (YYYY-MM-DD)."
steps:
- name: get-positions
type: call
call: "kyriba.get-cash-positions"
with:
date: "{{report_date}}"
- name: compute-lcr
type: call
call: "liquidity-engine.calculate-lcr"
with:
positions: "{{get-positions.positions}}"
report_date: "{{report_date}}"
- name: send-report
type: call
call: "outlook.send-mail"
with:
to: "treasury-management@citi.com"
subject: "Daily Liquidity Report - {{report_date}}"
body: "LCR: {{compute-lcr.lcr_ratio}}%. HQLA: {{compute-lcr.hqla_total}}. Net outflows: {{compute-lcr.net_outflows}}. Total cash: {{get-positions.total_cash}}."
consumes:
- type: http
namespace: kyriba
baseUri: "https://kyriba.citi.com/api/v3"
authentication:
type: bearer
token: "$secrets.kyriba_token"
resources:
- name: cash-positions
path: "/cash-positions"
operations:
- name: get-cash-positions
method: GET
- type: http
namespace: liquidity-engine
baseUri: "https://liquidity.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.liquidity_token"
resources:
- name: lcr
path: "/lcr/calculate"
operations:
- name: calculate-lcr
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-mail
method: POST
Retrieves current infrastructure health metrics from Datadog for a given service, including CPU, memory, and error rates.
naftiko: "0.5"
info:
label: "Datadog Infrastructure Monitor"
description: "Retrieves current infrastructure health metrics from Datadog for a given service, including CPU, memory, and error rates."
tags:
- operations
- datadog
- monitoring
capability:
exposes:
- type: mcp
namespace: ops-datadog
port: 8080
tools:
- name: get-service-metrics
description: "Fetch infrastructure health metrics from Datadog for a service."
inputParameters:
- name: service_name
in: body
type: string
description: "The service name in Datadog."
call: "datadog.get-metrics"
with:
service_name: "{{service_name}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
name: DD-API-KEY
in: header
value: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/query"
operations:
- name: get-metrics
method: GET
Handles OTC derivatives trade lifecycle events by updating Calypso, confirming via Markitwire, and posting settlement instructions to DTCC.
naftiko: "0.5"
info:
label: "Derivatives Trade Lifecycle Processor"
description: "Handles OTC derivatives trade lifecycle events by updating Calypso, confirming via Markitwire, and posting settlement instructions to DTCC."
tags:
- trading
- derivatives
- calypso
- markitwire
- dtcc
capability:
exposes:
- type: mcp
namespace: derivatives-lifecycle
port: 8080
tools:
- name: process-lifecycle-event
description: "Process an OTC derivatives lifecycle event across Calypso, Markitwire, and DTCC."
inputParameters:
- name: trade_id
in: body
type: string
description: "The Calypso trade identifier."
- name: event_type
in: body
type: string
description: "Lifecycle event: NOVATION, TERMINATION, AMENDMENT, EXERCISE."
steps:
- name: update-trade
type: call
call: "calypso.update-lifecycle"
with:
trade_id: "{{trade_id}}"
event_type: "{{event_type}}"
- name: confirm-event
type: call
call: "markitwire.submit-confirmation"
with:
trade_reference: "{{update-trade.external_reference}}"
event_type: "{{event_type}}"
effective_date: "{{update-trade.effective_date}}"
- name: post-settlement
type: call
call: "dtcc.submit-settlement"
with:
trade_reference: "{{update-trade.external_reference}}"
event_type: "{{event_type}}"
settlement_amount: "{{update-trade.settlement_amount}}"
currency: "{{update-trade.currency}}"
consumes:
- type: http
namespace: calypso
baseUri: "https://calypso.citi.com/calypsoserver/api/v1"
authentication:
type: bearer
token: "$secrets.calypso_token"
resources:
- name: lifecycle-events
path: "/trades/{{trade_id}}/lifecycle"
inputParameters:
- name: trade_id
in: path
operations:
- name: update-lifecycle
method: POST
- type: http
namespace: markitwire
baseUri: "https://markitwire.ihsmarkit.com/api/v1"
authentication:
type: bearer
token: "$secrets.markitwire_token"
resources:
- name: confirmations
path: "/confirmations"
operations:
- name: submit-confirmation
method: POST
- type: http
namespace: dtcc
baseUri: "https://api.dtcc.com/settlement/v1"
authentication:
type: bearer
token: "$secrets.dtcc_token"
resources:
- name: settlements
path: "/instructions"
operations:
- name: submit-settlement
method: POST
Reviews dormant accounts by identifying inactive accounts in the core banking system, running compliance checks, and notifying the operations team via Microsoft Teams for escheatment processing.
naftiko: "0.5"
info:
label: "Dormant Account Review Pipeline"
description: "Reviews dormant accounts by identifying inactive accounts in the core banking system, running compliance checks, and notifying the operations team via Microsoft Teams for escheatment processing."
tags:
- operations
- core-banking
- compliance
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: account-ops
port: 8080
tools:
- name: review-dormant-accounts
description: "Identify and review dormant accounts for compliance and escheatment."
inputParameters:
- name: dormancy_threshold_days
in: body
type: number
description: "Number of days of inactivity to qualify as dormant."
- name: jurisdiction
in: body
type: string
description: "The regulatory jurisdiction."
steps:
- name: find-dormant
type: call
call: "core-banking.get-dormant-accounts"
with:
threshold_days: "{{dormancy_threshold_days}}"
jurisdiction: "{{jurisdiction}}"
- name: run-compliance
type: call
call: "compliance.check-escheatment"
with:
accounts: "{{find-dormant.account_ids}}"
jurisdiction: "{{jurisdiction}}"
- name: notify-ops
type: call
call: "msteams.send-channel-message"
with:
team_id: "operations"
channel_id: "dormant_accounts"
text: "Dormant account review for {{jurisdiction}}: {{find-dormant.count}} accounts identified. {{run-compliance.escheatment_due}} due for escheatment. Threshold: {{dormancy_threshold_days}} days."
consumes:
- type: http
namespace: core-banking
baseUri: "https://core-banking.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.core_banking_token"
resources:
- name: dormant-accounts
path: "/accounts/dormant"
operations:
- name: get-dormant-accounts
method: GET
- type: http
namespace: compliance
baseUri: "https://compliance.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.compliance_token"
resources:
- name: escheatment
path: "/escheatment/check"
operations:
- name: check-escheatment
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Queries DTCC for the settlement status of a securities trade by trade reference number.
naftiko: "0.5"
info:
label: "DTCC Settlement Status Lookup"
description: "Queries DTCC for the settlement status of a securities trade by trade reference number."
tags:
- settlements
- dtcc
capability:
exposes:
- type: mcp
namespace: settlements-dtcc
port: 8080
tools:
- name: get-settlement-status
description: "Look up settlement status from DTCC by trade reference."
inputParameters:
- name: trade_ref
in: body
type: string
description: "The trade reference number."
call: "dtcc.get-status"
with:
trade_ref: "{{trade_ref}}"
consumes:
- type: http
namespace: dtcc
baseUri: "https://api.dtcc.com/v2"
authentication:
type: bearer
token: "$secrets.dtcc_token"
resources:
- name: settlements
path: "/settlements/{{trade_ref}}"
inputParameters:
- name: trade_ref
in: path
operations:
- name: get-status
method: GET
Orchestrates employee offboarding by deactivating the Workday profile, revoking access in SailPoint, closing ServiceNow tickets, and notifying HR via Microsoft Teams.
naftiko: "0.5"
info:
label: "Employee Offboarding Orchestrator"
description: "Orchestrates employee offboarding by deactivating the Workday profile, revoking access in SailPoint, closing ServiceNow tickets, and notifying HR via Microsoft Teams."
tags:
- hr
- workday
- sailpoint
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: offboard-employee
description: "Process full employee offboarding across HR, identity, and IT systems."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee identifier."
steps:
- name: deactivate-profile
type: call
call: "workday.deactivate-worker"
with:
employee_id: "{{employee_id}}"
- name: revoke-access
type: call
call: "sailpoint.revoke-all-access"
with:
identity_id: "{{employee_id}}"
- name: close-tickets
type: call
call: "servicenow.close-user-tickets"
with:
user_id: "{{employee_id}}"
- name: notify-hr
type: call
call: "msteams.send-channel-message"
with:
team_id: "human_resources"
channel_id: "offboarding"
text: "Employee {{employee_id}} offboarded. Workday: {{deactivate-profile.status}}. Access revoked: {{revoke-access.revoked_count}} entitlements. Tickets closed: {{close-tickets.closed_count}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl.workday.com/ccx/api/v1/citi"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{employee_id}}/deactivate"
inputParameters:
- name: employee_id
in: path
operations:
- name: deactivate-worker
method: POST
- type: http
namespace: sailpoint
baseUri: "https://citi.api.identitynow.com/v3"
authentication:
type: bearer
token: "$secrets.sailpoint_token"
resources:
- name: access
path: "/identities/{{identity_id}}/access"
inputParameters:
- name: identity_id
in: path
operations:
- name: revoke-all-access
method: DELETE
- type: http
namespace: servicenow
baseUri: "https://citi.service-now.com/api/now/table"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: tickets
path: "/incident"
operations:
- name: close-user-tickets
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Pulls end-of-day P&L from Murex for a trading desk, reconciles against the general ledger in SAP, and opens a ServiceNow ticket for any breaks.
naftiko: "0.5"
info:
label: "End-of-Day P&L Reconciliation"
description: "Pulls end-of-day P&L from Murex for a trading desk, reconciles against the general ledger in SAP, and opens a ServiceNow ticket for any breaks."
tags:
- trading
- finance
- murex
- sap
- servicenow
- reconciliation
capability:
exposes:
- type: mcp
namespace: finance-recon
port: 8080
tools:
- name: reconcile-eod-pnl
description: "Reconcile Murex trading desk P&L against SAP general ledger and raise ServiceNow tickets for breaks."
inputParameters:
- name: desk_id
in: body
type: string
description: "The trading desk identifier."
- name: business_date
in: body
type: string
description: "The business date in YYYY-MM-DD format."
steps:
- name: get-murex-pnl
type: call
call: "murex.get-desk-pnl"
with:
desk_id: "{{desk_id}}"
date: "{{business_date}}"
- name: get-gl-balance
type: call
call: "sap.get-gl-balance"
with:
cost_center: "{{get-murex-pnl.cost_center}}"
date: "{{business_date}}"
- name: raise-break-ticket
type: call
call: "servicenow.create-record"
with:
table: "u_pnl_breaks"
short_description: "P&L break: desk {{desk_id}} on {{business_date}}"
description: "Murex P&L: {{get-murex-pnl.total_pnl}} {{get-murex-pnl.currency}}. GL balance: {{get-gl-balance.balance}}. Difference: {{get-murex-pnl.total_pnl}} vs {{get-gl-balance.balance}}."
assigned_group: "Finance_Reconciliation"
consumes:
- type: http
namespace: murex
baseUri: "https://murex.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.murex_token"
resources:
- name: pnl
path: "/pnl/desk/{{desk_id}}?date={{date}}"
inputParameters:
- name: desk_id
in: path
- name: date
in: query
operations:
- name: get-desk-pnl
method: GET
- type: http
namespace: sap
baseUri: "https://sap.citi.com/sap/opu/odata/sap/API_GLACCOUNTBALANCE"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: gl-balances
path: "/A_GLAccountBalance?$filter=CostCenter eq '{{cost_center}}' and PostingDate eq '{{date}}'"
inputParameters:
- name: cost_center
in: query
- name: date
in: query
operations:
- name: get-gl-balance
method: GET
- type: http
namespace: servicenow
baseUri: "https://citi.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: table-records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Manages equity IPO allocations by collecting investor demand, computing allocations, booking in Calypso, and distributing confirmation notices via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Equity IPO Allocation Pipeline"
description: "Manages equity IPO allocations by collecting investor demand, computing allocations, booking in Calypso, and distributing confirmation notices via Microsoft Outlook."
tags:
- capital-markets
- ipo
- calypso
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: ecm-ipo
port: 8080
tools:
- name: process-ipo-allocation
description: "Compute and distribute IPO allocations across investors."
inputParameters:
- name: deal_id
in: body
type: string
description: "The IPO deal identifier."
- name: total_shares
in: body
type: number
description: "Total shares available for allocation."
steps:
- name: get-demand
type: call
call: "bookrunner.get-demand"
with:
deal_id: "{{deal_id}}"
- name: compute-alloc
type: call
call: "bookrunner.compute-allocations"
with:
deal_id: "{{deal_id}}"
total_shares: "{{total_shares}}"
total_demand: "{{get-demand.total_demand}}"
- name: book-trades
type: call
call: "calypso.create-bulk-trades"
with:
deal_id: "{{deal_id}}"
allocations: "{{compute-alloc.allocations}}"
- name: send-notices
type: call
call: "outlook.send-mail"
with:
to: "{{compute-alloc.investor_emails}}"
subject: "IPO Allocation Confirmation - {{deal_id}}"
body: "Your allocation for deal {{deal_id}} has been confirmed. Total shares: {{total_shares}}. Oversubscription: {{get-demand.oversubscription_ratio}}x."
consumes:
- type: http
namespace: bookrunner
baseUri: "https://bookrunner.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.bookrunner_token"
resources:
- name: demand
path: "/deals/{{deal_id}}/demand"
inputParameters:
- name: deal_id
in: path
operations:
- name: get-demand
method: GET
- name: allocations
path: "/deals/{{deal_id}}/allocate"
inputParameters:
- name: deal_id
in: path
operations:
- name: compute-allocations
method: POST
- type: http
namespace: calypso
baseUri: "https://calypso.citi.com/api/v4"
authentication:
type: bearer
token: "$secrets.calypso_token"
resources:
- name: bulk-trades
path: "/trades/bulk"
operations:
- name: create-bulk-trades
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-mail
method: POST
Books an equity trade in Calypso, sends an allocation to Broadridge for clearing, and confirms the execution to the client via Salesforce activity log.
naftiko: "0.5"
info:
label: "Equity Trade Booking Pipeline"
description: "Books an equity trade in Calypso, sends an allocation to Broadridge for clearing, and confirms the execution to the client via Salesforce activity log."
tags:
- trading
- equities
- calypso
- broadridge
- salesforce
capability:
exposes:
- type: mcp
namespace: equities-booking
port: 8080
tools:
- name: book-equity-trade
description: "Book an equity trade in Calypso, allocate via Broadridge, and log client confirmation in Salesforce."
inputParameters:
- name: security_ticker
in: body
type: string
description: "The equity ticker symbol."
- name: quantity
in: body
type: number
description: "The number of shares."
- name: side
in: body
type: string
description: "BUY or SELL."
- name: client_sf_id
in: body
type: string
description: "The Salesforce client account ID."
steps:
- name: book-trade
type: call
call: "calypso.create-trade"
with:
product_type: "EQUITY"
security: "{{security_ticker}}"
quantity: "{{quantity}}"
side: "{{side}}"
- name: allocate-clearing
type: call
call: "broadridge.submit-allocation"
with:
trade_reference: "{{book-trade.trade_id}}"
security: "{{security_ticker}}"
quantity: "{{quantity}}"
- name: log-activity
type: call
call: "salesforce.create-activity"
with:
account_id: "{{client_sf_id}}"
subject: "Equity trade executed: {{side}} {{quantity}} {{security_ticker}}"
description: "Trade {{book-trade.trade_id}} booked. {{side}} {{quantity}} shares of {{security_ticker}} at {{book-trade.execution_price}}. Clearing ref: {{allocate-clearing.allocation_id}}."
consumes:
- type: http
namespace: calypso
baseUri: "https://calypso.citi.com/calypsoserver/api/v1"
authentication:
type: bearer
token: "$secrets.calypso_token"
resources:
- name: trades
path: "/trades"
operations:
- name: create-trade
method: POST
- type: http
namespace: broadridge
baseUri: "https://broadridge.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.broadridge_token"
resources:
- name: allocations
path: "/allocations"
operations:
- name: submit-allocation
method: POST
- type: http
namespace: salesforce
baseUri: "https://citi.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: activities
path: "/sobjects/Task"
operations:
- name: create-activity
method: POST
Retrieves submitted expense reports from SAP Concur, validates against Workday cost center and policy limits, and opens a ServiceNow task for finance review when exceptions are found.
naftiko: "0.5"
info:
label: "Expense Report Compliance Check"
description: "Retrieves submitted expense reports from SAP Concur, validates against Workday cost center and policy limits, and opens a ServiceNow task for finance review when exceptions are found."
tags:
- finance
- expense
- concur
- workday
- servicenow
capability:
exposes:
- type: mcp
namespace: finance-expense
port: 8080
tools:
- name: review-expense-report
description: "Given a Concur expense report ID and employee ID, fetch the report, validate cost center via Workday, and flag policy violations to ServiceNow."
inputParameters:
- name: expense_report_id
in: body
type: string
description: "The SAP Concur expense report ID."
- name: employee_id
in: body
type: string
description: "The Workday employee ID of the submitter."
steps:
- name: get-expense-report
type: call
call: "concur.get-expense-report"
with:
report_id: "{{expense_report_id}}"
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{employee_id}}"
- name: open-review-task
type: call
call: "servicenow.create-record"
with:
table: "u_expense_reviews"
short_description: "Expense review: {{get-expense-report.report_name}} — {{get-employee.full_name}}"
description: "Report {{expense_report_id}} total: {{get-expense-report.total_amount}} {{get-expense-report.currency}}. Cost center: {{get-employee.cost_center}}. Submitted: {{get-expense-report.submit_date}}."
assigned_group: "Finance_Audit"
consumes:
- type: http
namespace: concur
baseUri: "https://us2.api.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: expense-reports
path: "/expense/reports/{{report_id}}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-expense-report
method: GET
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://citi.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: table-records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Retrieves current outstanding balance and repayment schedule for a commercial loan from Finastra Fusion.
naftiko: "0.5"
info:
label: "Finastra Loan Balance Lookup"
description: "Retrieves current outstanding balance and repayment schedule for a commercial loan from Finastra Fusion."
tags:
- lending
- finastra
capability:
exposes:
- type: mcp
namespace: lending-finastra
port: 8080
tools:
- name: get-loan-balance
description: "Fetch loan balance and repayment schedule from Finastra Fusion."
inputParameters:
- name: loan_id
in: body
type: string
description: "The Finastra loan identifier."
call: "finastra.get-loan"
with:
loan_id: "{{loan_id}}"
consumes:
- type: http
namespace: finastra
baseUri: "https://finastra.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.finastra_token"
resources:
- name: loans
path: "/loans/{{loan_id}}"
inputParameters:
- name: loan_id
in: path
operations:
- name: get-loan
method: GET
Retrieves payment transaction status from FIS Global payments platform by payment reference.
naftiko: "0.5"
info:
label: "FIS Payment Status Lookup"
description: "Retrieves payment transaction status from FIS Global payments platform by payment reference."
tags:
- payments
- fis
capability:
exposes:
- type: mcp
namespace: payments-fis
port: 8080
tools:
- name: get-payment-status
description: "Look up payment status from FIS Global."
inputParameters:
- name: payment_ref
in: body
type: string
description: "The FIS payment reference."
call: "fis.get-payment"
with:
payment_ref: "{{payment_ref}}"
consumes:
- type: http
namespace: fis
baseUri: "https://api.fisglobal.com/payments/v2"
authentication:
type: bearer
token: "$secrets.fis_token"
resources:
- name: payments
path: "/transactions/{{payment_ref}}"
inputParameters:
- name: payment_ref
in: path
operations:
- name: get-payment
method: GET
Allocates a block fixed income trade by splitting across accounts in Calypso, confirming via DTCC, and notifying portfolio managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Fixed Income Trade Allocation Pipeline"
description: "Allocates a block fixed income trade by splitting across accounts in Calypso, confirming via DTCC, and notifying portfolio managers via Microsoft Teams."
tags:
- fixed-income
- calypso
- dtcc
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: fi-allocation
port: 8080
tools:
- name: allocate-fi-trade
description: "Allocate a block fixed income trade across accounts with DTCC confirmation."
inputParameters:
- name: block_trade_id
in: body
type: string
description: "The block trade identifier."
- name: allocation_count
in: body
type: number
description: "Number of sub-accounts for allocation."
steps:
- name: get-block
type: call
call: "calypso.get-trade"
with:
trade_id: "{{block_trade_id}}"
- name: allocate
type: call
call: "calypso.allocate-trade"
with:
block_trade_id: "{{block_trade_id}}"
allocation_count: "{{allocation_count}}"
- name: confirm-dtcc
type: call
call: "dtcc.submit-allocation"
with:
block_trade_id: "{{block_trade_id}}"
allocations: "{{allocate.allocations}}"
- name: notify-pms
type: call
call: "msteams.send-channel-message"
with:
team_id: "fixed_income"
channel_id: "allocations"
text: "Block trade {{block_trade_id}} allocated to {{allocation_count}} accounts. Security: {{get-block.security_id}}. DTCC status: {{confirm-dtcc.status}}."
consumes:
- type: http
namespace: calypso
baseUri: "https://calypso.citi.com/api/v4"
authentication:
type: bearer
token: "$secrets.calypso_token"
resources:
- name: trades
path: "/trades/{{trade_id}}"
inputParameters:
- name: trade_id
in: path
operations:
- name: get-trade
method: GET
- name: allocations
path: "/trades/{{block_trade_id}}/allocate"
inputParameters:
- name: block_trade_id
in: path
operations:
- name: allocate-trade
method: POST
- type: http
namespace: dtcc
baseUri: "https://api.dtcc.com/v2"
authentication:
type: bearer
token: "$secrets.dtcc_token"
resources:
- name: allocations
path: "/allocations"
operations:
- name: submit-allocation
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves an FX option quote from Murex using vol surface data from Bloomberg, returning premium, delta, gamma, and vega.
naftiko: "0.5"
info:
label: "FX Option Pricing Request"
description: "Retrieves an FX option quote from Murex using vol surface data from Bloomberg, returning premium, delta, gamma, and vega."
tags:
- trading
- fx-options
- murex
- bloomberg
capability:
exposes:
- type: mcp
namespace: fx-options
port: 8080
tools:
- name: price-fx-option
description: "Price an FX option by fetching vol surface from Bloomberg and calculating Greeks in Murex."
inputParameters:
- name: currency_pair
in: body
type: string
description: "The currency pair (e.g., EURUSD)."
- name: option_type
in: body
type: string
description: "CALL or PUT."
- name: strike
in: body
type: number
description: "The strike price."
- name: expiry_date
in: body
type: string
description: "The option expiry date in YYYY-MM-DD format."
- name: notional
in: body
type: number
description: "The notional amount."
steps:
- name: get-vol-surface
type: call
call: "bloomberg.get-vol-surface"
with:
currency_pair: "{{currency_pair}}"
expiry_date: "{{expiry_date}}"
- name: price-option
type: call
call: "murex.price-fx-option"
with:
currency_pair: "{{currency_pair}}"
option_type: "{{option_type}}"
strike: "{{strike}}"
expiry_date: "{{expiry_date}}"
notional: "{{notional}}"
vol_surface: "{{get-vol-surface.surface_data}}"
consumes:
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: vol-surfaces
path: "/volatility/{{currency_pair}}?expiry={{expiry_date}}"
inputParameters:
- name: currency_pair
in: path
- name: expiry_date
in: query
operations:
- name: get-vol-surface
method: GET
- type: http
namespace: murex
baseUri: "https://murex.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.murex_token"
resources:
- name: fx-options
path: "/pricing/fx-options"
operations:
- name: price-fx-option
method: POST
Retrieves an FX trade from Murex, validates settlement details against SWIFT gpi, and logs the trade status in ServiceNow for operations tracking.
naftiko: "0.5"
info:
label: "FX Trade Execution Monitor"
description: "Retrieves an FX trade from Murex, validates settlement details against SWIFT gpi, and logs the trade status in ServiceNow for operations tracking."
tags:
- trading
- fx
- murex
- swift
- servicenow
capability:
exposes:
- type: mcp
namespace: fx-trading
port: 8080
tools:
- name: monitor-fx-trade
description: "Given a Murex trade ID, fetch trade details, check SWIFT gpi settlement status, and log a ServiceNow operations record."
inputParameters:
- name: trade_id
in: body
type: string
description: "The Murex FX trade identifier."
- name: value_date
in: body
type: string
description: "The trade value date in YYYY-MM-DD format."
steps:
- name: get-trade
type: call
call: "murex.get-trade"
with:
trade_id: "{{trade_id}}"
- name: check-settlement
type: call
call: "swift-gpi.get-payment-status"
with:
uetr: "{{get-trade.uetr}}"
- name: log-status
type: call
call: "servicenow.create-record"
with:
table: "u_fx_operations"
short_description: "FX trade {{trade_id}} settlement: {{check-settlement.transaction_status}}"
description: "Trade {{trade_id}} — {{get-trade.currency_pair}} {{get-trade.notional}} value date {{value_date}}. SWIFT status: {{check-settlement.transaction_status}}. Counterparty: {{get-trade.counterparty}}."
consumes:
- type: http
namespace: murex
baseUri: "https://murex.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.murex_token"
resources:
- name: trades
path: "/trades/{{trade_id}}"
inputParameters:
- name: trade_id
in: path
operations:
- name: get-trade
method: GET
- type: http
namespace: swift-gpi
baseUri: "https://api.swiftnet.sipn.swift.com/gpi/v4"
authentication:
type: bearer
token: "$secrets.swift_gpi_token"
resources:
- name: payment-transactions
path: "/payment_transactions/{{uetr}}"
inputParameters:
- name: uetr
in: path
operations:
- name: get-payment-status
method: GET
- type: http
namespace: servicenow
baseUri: "https://citi.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: table-records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Executes an FX trade settlement by confirming the deal in Murex, submitting a CLS settlement instruction, and notifying the treasury desk via Microsoft Teams.
naftiko: "0.5"
info:
label: "FX Trade Settlement Pipeline"
description: "Executes an FX trade settlement by confirming the deal in Murex, submitting a CLS settlement instruction, and notifying the treasury desk via Microsoft Teams."
tags:
- forex
- murex
- cls
- microsoft-teams
- settlements
capability:
exposes:
- type: mcp
namespace: fx-settlement
port: 8080
tools:
- name: settle-fx-trade
description: "Settle an FX trade through Murex confirmation, CLS submission, and treasury notification."
inputParameters:
- name: trade_id
in: body
type: string
description: "The Murex FX trade identifier."
- name: settlement_date
in: body
type: string
description: "The intended settlement date."
steps:
- name: confirm-deal
type: call
call: "murex.get-trade"
with:
trade_id: "{{trade_id}}"
- name: submit-cls
type: call
call: "cls.create-instruction"
with:
trade_id: "{{trade_id}}"
settlement_date: "{{settlement_date}}"
currency_pair: "{{confirm-deal.currency_pair}}"
amount: "{{confirm-deal.notional}}"
- name: notify-treasury
type: call
call: "msteams.send-channel-message"
with:
team_id: "treasury_desk"
channel_id: "fx_settlements"
text: "FX trade {{trade_id}} submitted to CLS. Pair: {{confirm-deal.currency_pair}}, Amount: {{confirm-deal.notional}}, Settlement: {{settlement_date}}. CLS ref: {{submit-cls.instruction_ref}}."
consumes:
- type: http
namespace: murex
baseUri: "https://murex.citi.com/api/v3"
authentication:
type: bearer
token: "$secrets.murex_token"
resources:
- name: trades
path: "/trades/{{trade_id}}"
inputParameters:
- name: trade_id
in: path
operations:
- name: get-trade
method: GET
- type: http
namespace: cls
baseUri: "https://api.cls-group.com/v1"
authentication:
type: bearer
token: "$secrets.cls_token"
resources:
- name: instructions
path: "/instructions"
operations:
- name: create-instruction
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Orchestrates end-of-day global cash sweeps by retrieving balances from Kyriba, executing inter-entity transfers via CitiConnect, and generating the sweep report for the treasury team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Global Cash Sweep Orchestrator"
description: "Orchestrates end-of-day global cash sweeps by retrieving balances from Kyriba, executing inter-entity transfers via CitiConnect, and generating the sweep report for the treasury team via Microsoft Teams."
tags:
- treasury
- kyriba
- citiconnect
- microsoft-teams
- cash-management
capability:
exposes:
- type: mcp
namespace: treasury-sweep
port: 8080
tools:
- name: execute-cash-sweep
description: "Run global cash sweep across entities with balance retrieval, transfers, and reporting."
inputParameters:
- name: sweep_date
in: body
type: string
description: "The sweep date (YYYY-MM-DD)."
- name: target_entity
in: body
type: string
description: "The target concentration entity."
steps:
- name: get-balances
type: call
call: "kyriba.get-cash-positions"
with:
date: "{{sweep_date}}"
- name: execute-transfers
type: call
call: "citiconnect.create-bulk-transfer"
with:
source_entities: "{{get-balances.surplus_entities}}"
target_entity: "{{target_entity}}"
sweep_date: "{{sweep_date}}"
- name: notify-treasury
type: call
call: "msteams.send-channel-message"
with:
team_id: "treasury"
channel_id: "cash_sweeps"
text: "Global cash sweep completed for {{sweep_date}}. {{execute-transfers.transfer_count}} transfers executed. Total swept: {{execute-transfers.total_amount}} USD to {{target_entity}}."
consumes:
- type: http
namespace: kyriba
baseUri: "https://kyriba.citi.com/api/v3"
authentication:
type: bearer
token: "$secrets.kyriba_token"
resources:
- name: cash-positions
path: "/cash-positions"
operations:
- name: get-cash-positions
method: GET
- type: http
namespace: citiconnect
baseUri: "https://citiconnect.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.citiconnect_token"
resources:
- name: bulk-transfers
path: "/bulk-transfers"
operations:
- name: create-bulk-transfer
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Orchestrates interest rate hedge execution by pricing the swap in Murex, booking the hedge in Calypso, and reporting to the risk team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Interest Rate Hedging Orchestrator"
description: "Orchestrates interest rate hedge execution by pricing the swap in Murex, booking the hedge in Calypso, and reporting to the risk team via Microsoft Teams."
tags:
- treasury
- murex
- calypso
- microsoft-teams
- hedging
capability:
exposes:
- type: mcp
namespace: treasury-hedging
port: 8080
tools:
- name: execute-ir-hedge
description: "Price and book an interest rate hedge across Murex and Calypso with risk notification."
inputParameters:
- name: notional
in: body
type: number
description: "The swap notional amount."
- name: tenor
in: body
type: string
description: "The swap tenor (e.g., 5Y, 10Y)."
- name: fixed_rate
in: body
type: number
description: "The fixed leg rate."
steps:
- name: price-swap
type: call
call: "murex.price-swap"
with:
notional: "{{notional}}"
tenor: "{{tenor}}"
fixed_rate: "{{fixed_rate}}"
- name: book-hedge
type: call
call: "calypso.create-trade"
with:
product_type: "irs"
notional: "{{notional}}"
tenor: "{{tenor}}"
fixed_rate: "{{fixed_rate}}"
npv: "{{price-swap.npv}}"
- name: notify-risk
type: call
call: "msteams.send-channel-message"
with:
team_id: "treasury"
channel_id: "hedging"
text: "IR hedge booked: {{tenor}} swap, notional {{notional}}, fixed {{fixed_rate}}%. NPV: {{price-swap.npv}}. Calypso ID: {{book-hedge.trade_id}}."
consumes:
- type: http
namespace: murex
baseUri: "https://murex.citi.com/api/v3"
authentication:
type: bearer
token: "$secrets.murex_token"
resources:
- name: pricing
path: "/pricing/swaps"
operations:
- name: price-swap
method: POST
- type: http
namespace: calypso
baseUri: "https://calypso.citi.com/api/v4"
authentication:
type: bearer
token: "$secrets.calypso_token"
resources:
- name: trades
path: "/trades"
operations:
- name: create-trade
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves an IRS trade from Calypso, pulls the current yield curve from Bloomberg, and returns the mark-to-market valuation with DV01 sensitivity.
naftiko: "0.5"
info:
label: "Interest Rate Swap Valuation"
description: "Retrieves an IRS trade from Calypso, pulls the current yield curve from Bloomberg, and returns the mark-to-market valuation with DV01 sensitivity."
tags:
- trading
- rates
- calypso
- bloomberg
- valuation
capability:
exposes:
- type: mcp
namespace: rates-valuation
port: 8080
tools:
- name: value-irs-trade
description: "Fetch an IRS trade from Calypso, retrieve yield curve from Bloomberg, and calculate MTM and DV01."
inputParameters:
- name: trade_id
in: body
type: string
description: "The Calypso IRS trade identifier."
- name: curve_id
in: body
type: string
description: "The Bloomberg yield curve identifier (e.g., YCSW0023 Index)."
steps:
- name: get-trade
type: call
call: "calypso.get-trade"
with:
trade_id: "{{trade_id}}"
- name: get-curve
type: call
call: "bloomberg.get-yield-curve"
with:
curve_id: "{{curve_id}}"
- name: get-valuation
type: call
call: "calypso.get-valuation"
with:
trade_id: "{{trade_id}}"
curve_data: "{{get-curve.curve_points}}"
consumes:
- type: http
namespace: calypso
baseUri: "https://calypso.citi.com/calypsoserver/api/v1"
authentication:
type: bearer
token: "$secrets.calypso_token"
resources:
- name: trades
path: "/trades/{{trade_id}}"
inputParameters:
- name: trade_id
in: path
operations:
- name: get-trade
method: GET
- name: valuations
path: "/trades/{{trade_id}}/valuation"
inputParameters:
- name: trade_id
in: path
operations:
- name: get-valuation
method: POST
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: yield-curves
path: "/curves/{{curve_id}}"
inputParameters:
- name: curve_id
in: path
operations:
- name: get-yield-curve
method: GET
Retrieves real-time intraday cash positions from Kyriba, checks against regulatory thresholds, and triggers a Teams alert to the treasury desk if buffers are breached.
naftiko: "0.5"
info:
label: "Intraday Liquidity Position Monitor"
description: "Retrieves real-time intraday cash positions from Kyriba, checks against regulatory thresholds, and triggers a Teams alert to the treasury desk if buffers are breached."
tags:
- treasury
- liquidity
- kyriba
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: treasury-intraday
port: 8080
tools:
- name: monitor-intraday-liquidity
description: "Check intraday liquidity positions in Kyriba against thresholds and alert treasury desk via Teams if breached."
inputParameters:
- name: entity_code
in: body
type: string
description: "The Citi legal entity code."
- name: currency
in: body
type: string
description: "ISO 4217 currency code."
- name: treasury_email
in: body
type: string
description: "Treasury desk email for alert notification."
steps:
- name: get-position
type: call
call: "kyriba.get-intraday-position"
with:
entity_code: "{{entity_code}}"
currency: "{{currency}}"
- name: alert-treasury
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{treasury_email}}"
text: "Intraday liquidity alert: Entity {{entity_code}} {{currency}} position is {{get-position.current_balance}}. Buffer: {{get-position.buffer_remaining}}. Projected outflows: {{get-position.projected_outflows}}."
consumes:
- type: http
namespace: kyriba
baseUri: "https://citi.kyriba.com/gateway/api/v1"
authentication:
type: bearer
token: "$secrets.kyriba_token"
resources:
- name: intraday-positions
path: "/cash/intraday?entityCode={{entity_code}}¤cy={{currency}}"
inputParameters:
- name: entity_code
in: query
- name: currency
in: query
operations:
- name: get-intraday-position
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Reviews an ISDA master agreement by extracting document data from OpenText, comparing terms against standard templates, and routing exceptions to the legal team via Pega case management.
naftiko: "0.5"
info:
label: "ISDA Agreement Review Pipeline"
description: "Reviews an ISDA master agreement by extracting document data from OpenText, comparing terms against standard templates, and routing exceptions to the legal team via Pega case management."
tags:
- legal
- opentext
- pega
- isda
capability:
exposes:
- type: mcp
namespace: legal-isda
port: 8080
tools:
- name: review-isda-agreement
description: "Extract and review ISDA agreement with exception routing."
inputParameters:
- name: agreement_id
in: body
type: string
description: "The ISDA agreement document identifier."
- name: counterparty_name
in: body
type: string
description: "The counterparty name."
steps:
- name: get-document
type: call
call: "opentext.get-document"
with:
document_id: "{{agreement_id}}"
- name: compare-terms
type: call
call: "legal-engine.compare-isda"
with:
document_id: "{{agreement_id}}"
counterparty: "{{counterparty_name}}"
- name: route-exceptions
type: call
call: "pega.create-case"
with:
case_type: "ISDAReview"
agreement_id: "{{agreement_id}}"
counterparty: "{{counterparty_name}}"
exceptions: "{{compare-terms.exceptions}}"
consumes:
- type: http
namespace: opentext
baseUri: "https://opentext.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.opentext_token"
resources:
- name: documents
path: "/documents/{{document_id}}"
inputParameters:
- name: document_id
in: path
operations:
- name: get-document
method: GET
- type: http
namespace: legal-engine
baseUri: "https://legal-engine.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.legal_engine_token"
resources:
- name: isda-comparison
path: "/isda/compare"
operations:
- name: compare-isda
method: POST
- type: http
namespace: pega
baseUri: "https://pega.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.pega_token"
resources:
- name: cases
path: "/cases"
operations:
- name: create-case
method: POST
Retrieves incident ticket details from Jira including priority, assignee, status, and linked change requests.
naftiko: "0.5"
info:
label: "Jira Incident Ticket Lookup"
description: "Retrieves incident ticket details from Jira including priority, assignee, status, and linked change requests."
tags:
- operations
- jira
capability:
exposes:
- type: mcp
namespace: ops-jira
port: 8080
tools:
- name: get-incident-ticket
description: "Fetch incident ticket details from Jira."
inputParameters:
- name: ticket_key
in: body
type: string
description: "The Jira ticket key (e.g., INC-12345)."
call: "jira.get-issue"
with:
ticket_key: "{{ticket_key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://citi.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue/{{ticket_key}}"
inputParameters:
- name: ticket_key
in: path
operations:
- name: get-issue
method: GET
Retrieves a client KYC case from Pegasystems, pulls identity documents from OpenText, runs adverse media checks via Refinitiv World-Check, and updates the case status.
naftiko: "0.5"
info:
label: "KYC Document Verification Pipeline"
description: "Retrieves a client KYC case from Pegasystems, pulls identity documents from OpenText, runs adverse media checks via Refinitiv World-Check, and updates the case status."
tags:
- compliance
- kyc
- pega
- opentext
- refinitiv
- world-check
capability:
exposes:
- type: mcp
namespace: compliance-kyc
port: 8080
tools:
- name: verify-kyc-documents
description: "Given a Pega KYC case ID, retrieve client documents from OpenText, screen against Refinitiv World-Check, and update the Pega case with findings."
inputParameters:
- name: case_id
in: body
type: string
description: "The Pega KYC case identifier."
- name: client_id
in: body
type: string
description: "The Citi client identifier for screening."
steps:
- name: get-kyc-case
type: call
call: "pega.get-case"
with:
case_id: "{{case_id}}"
- name: get-documents
type: call
call: "opentext.get-documents"
with:
folder_id: "{{get-kyc-case.document_folder_id}}"
- name: screen-client
type: call
call: "world-check.screen-entity"
with:
entity_name: "{{get-kyc-case.client_name}}"
entity_type: "{{get-kyc-case.entity_type}}"
- name: update-case
type: call
call: "pega.update-case"
with:
case_id: "{{case_id}}"
screening_result: "{{screen-client.match_status}}"
documents_verified: "{{get-documents.count}}"
consumes:
- type: http
namespace: pega
baseUri: "https://pega.citi.com/prweb/api/v1"
authentication:
type: bearer
token: "$secrets.pega_token"
resources:
- name: cases
path: "/cases/{{case_id}}"
inputParameters:
- name: case_id
in: path
operations:
- name: get-case
method: GET
- name: update-case
method: PUT
- type: http
namespace: opentext
baseUri: "https://opentext.citi.com/otcs/v2"
authentication:
type: bearer
token: "$secrets.opentext_token"
resources:
- name: documents
path: "/nodes/{{folder_id}}/nodes"
inputParameters:
- name: folder_id
in: path
operations:
- name: get-documents
method: GET
- type: http
namespace: world-check
baseUri: "https://api.refinitiv.com/world-check/v2"
authentication:
type: bearer
token: "$secrets.refinitiv_token"
resources:
- name: screening
path: "/cases/screeningRequest"
operations:
- name: screen-entity
method: POST
Fetches bank statement data from Kyriba, compares against SAP general ledger postings for the same period, and opens a ServiceNow task for any discrepancies.
naftiko: "0.5"
info:
label: "Kyriba Bank Statement Reconciliation"
description: "Fetches bank statement data from Kyriba, compares against SAP general ledger postings for the same period, and opens a ServiceNow task for any discrepancies."
tags:
- treasury
- kyriba
- sap
- servicenow
- bank-statements
capability:
exposes:
- type: mcp
namespace: treasury-statements
port: 8080
tools:
- name: reconcile-bank-statement
description: "Retrieve Kyriba bank statements, compare with SAP GL entries, and raise ServiceNow tasks for discrepancies."
inputParameters:
- name: account_id
in: body
type: string
description: "The Kyriba bank account identifier."
- name: cost_center
in: body
type: string
description: "The SAP cost center for GL comparison."
- name: statement_date
in: body
type: string
description: "The statement date in YYYY-MM-DD format."
steps:
- name: get-statement
type: call
call: "kyriba.get-statement"
with:
account_id: "{{account_id}}"
date: "{{statement_date}}"
- name: get-gl-entries
type: call
call: "sap.get-gl-balance"
with:
cost_center: "{{cost_center}}"
date: "{{statement_date}}"
- name: raise-discrepancy
type: call
call: "servicenow.create-record"
with:
table: "u_bank_recon"
short_description: "Bank statement recon: account {{account_id}} on {{statement_date}}"
description: "Kyriba closing balance: {{get-statement.closing_balance}} {{get-statement.currency}}. SAP GL balance: {{get-gl-entries.balance}}. Account: {{account_id}}. Cost center: {{cost_center}}."
assigned_group: "Treasury_Operations"
consumes:
- type: http
namespace: kyriba
baseUri: "https://citi.kyriba.com/gateway/api/v1"
authentication:
type: bearer
token: "$secrets.kyriba_token"
resources:
- name: statements
path: "/bank-statements?accountId={{account_id}}&date={{date}}"
inputParameters:
- name: account_id
in: query
- name: date
in: query
operations:
- name: get-statement
method: GET
- type: http
namespace: sap
baseUri: "https://sap.citi.com/sap/opu/odata/sap/API_GLACCOUNTBALANCE"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: gl-balances
path: "/A_GLAccountBalance?$filter=CostCenter eq '{{cost_center}}' and PostingDate eq '{{date}}'"
inputParameters:
- name: cost_center
in: query
- name: date
in: query
operations:
- name: get-gl-balance
method: GET
- type: http
namespace: servicenow
baseUri: "https://citi.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: table-records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Triggers a liquidity stress test scenario in Kyriba, retrieves results, and pushes the summary to Axiom SL for regulatory consolidation.
naftiko: "0.5"
info:
label: "Liquidity Stress Test Runner"
description: "Triggers a liquidity stress test scenario in Kyriba, retrieves results, and pushes the summary to Axiom SL for regulatory consolidation."
tags:
- treasury
- liquidity
- kyriba
- axiom-sl
- stress-testing
capability:
exposes:
- type: mcp
namespace: treasury-stress
port: 8080
tools:
- name: run-liquidity-stress-test
description: "Execute a liquidity stress scenario in Kyriba and push results to Axiom SL for regulatory reporting."
inputParameters:
- name: scenario_id
in: body
type: string
description: "The Kyriba stress test scenario identifier."
- name: as_of_date
in: body
type: string
description: "The as-of date for the stress test in YYYY-MM-DD format."
steps:
- name: run-scenario
type: call
call: "kyriba.run-stress-test"
with:
scenario_id: "{{scenario_id}}"
as_of_date: "{{as_of_date}}"
- name: get-results
type: call
call: "kyriba.get-stress-results"
with:
execution_id: "{{run-scenario.execution_id}}"
- name: submit-to-axiom
type: call
call: "axiom-sl.submit-data"
with:
report_type: "LCR_STRESS"
period: "{{as_of_date}}"
payload: "{{get-results.summary}}"
consumes:
- type: http
namespace: kyriba
baseUri: "https://citi.kyriba.com/gateway/api/v1"
authentication:
type: bearer
token: "$secrets.kyriba_token"
resources:
- name: stress-tests
path: "/stress-tests"
operations:
- name: run-stress-test
method: POST
- name: stress-results
path: "/stress-tests/{{execution_id}}/results"
inputParameters:
- name: execution_id
in: path
operations:
- name: get-stress-results
method: GET
- type: http
namespace: axiom-sl
baseUri: "https://axiom.citi.com/controller/api/v1"
authentication:
type: bearer
token: "$secrets.axiom_sl_token"
resources:
- name: data-submissions
path: "/data/submissions"
operations:
- name: submit-data
method: POST
Retrieves loan facility covenants from Loan IQ, pulls the borrower's latest financials from SAP, and creates a ServiceNow task when covenant thresholds are at risk.
naftiko: "0.5"
info:
label: "Loan Covenant Monitoring Pipeline"
description: "Retrieves loan facility covenants from Loan IQ, pulls the borrower's latest financials from SAP, and creates a ServiceNow task when covenant thresholds are at risk."
tags:
- corporate-banking
- lending
- loan-iq
- sap
- servicenow
- covenant
capability:
exposes:
- type: mcp
namespace: lending-covenants
port: 8080
tools:
- name: monitor-loan-covenants
description: "Check Loan IQ covenants against SAP financial data and raise ServiceNow tasks for threshold breaches."
inputParameters:
- name: facility_id
in: body
type: string
description: "The Loan IQ facility identifier."
- name: borrower_cost_center
in: body
type: string
description: "The SAP cost center code for the borrower entity."
steps:
- name: get-covenants
type: call
call: "loan-iq.get-covenants"
with:
facility_id: "{{facility_id}}"
- name: get-financials
type: call
call: "sap.get-gl-balance"
with:
cost_center: "{{borrower_cost_center}}"
posting_date: "2026-03-27"
- name: raise-alert
type: call
call: "servicenow.create-record"
with:
table: "u_covenant_alerts"
short_description: "Covenant monitoring: facility {{facility_id}}"
description: "Facility {{facility_id}} covenants: {{get-covenants.covenant_summary}}. Current financials: GL balance {{get-financials.balance}}. Review required."
assigned_group: "Credit_Risk"
consumes:
- type: http
namespace: loan-iq
baseUri: "https://loaniq.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.loaniq_token"
resources:
- name: covenants
path: "/facilities/{{facility_id}}/covenants"
inputParameters:
- name: facility_id
in: path
operations:
- name: get-covenants
method: GET
- type: http
namespace: sap
baseUri: "https://sap.citi.com/sap/opu/odata/sap/API_GLACCOUNTBALANCE"
authentication:
type: basic
username: "$secrets.sap_user"
password: "$secrets.sap_password"
resources:
- name: gl-balances
path: "/A_GLAccountBalance?$filter=CostCenter eq '{{cost_center}}' and PostingDate eq '{{posting_date}}'"
inputParameters:
- name: cost_center
in: query
- name: posting_date
in: query
operations:
- name: get-gl-balance
method: GET
- type: http
namespace: servicenow
baseUri: "https://citi.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: table-records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Retrieves a loan facility from Loan IQ by facility ID, returning commitment amount, available balance, maturity date, and borrower details.
naftiko: "0.5"
info:
label: "Loan IQ Facility Status Lookup"
description: "Retrieves a loan facility from Loan IQ by facility ID, returning commitment amount, available balance, maturity date, and borrower details."
tags:
- corporate-banking
- lending
- loan-iq
capability:
exposes:
- type: mcp
namespace: lending-loaniq
port: 8080
tools:
- name: get-facility-status
description: "Fetch loan facility details from Loan IQ including commitment, availability, and maturity."
inputParameters:
- name: facility_id
in: body
type: string
description: "The Loan IQ facility identifier."
call: "loan-iq.get-facility"
with:
facility_id: "{{facility_id}}"
consumes:
- type: http
namespace: loan-iq
baseUri: "https://loaniq.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.loaniq_token"
resources:
- name: facilities
path: "/facilities/{{facility_id}}"
inputParameters:
- name: facility_id
in: path
operations:
- name: get-facility
method: GET
Pulls Value-at-Risk data from the Calypso risk engine, retrieves market data from Bloomberg, and publishes a consolidated risk report to SharePoint for front office review.
naftiko: "0.5"
info:
label: "Market Risk VaR Report Generator"
description: "Pulls Value-at-Risk data from the Calypso risk engine, retrieves market data from Bloomberg, and publishes a consolidated risk report to SharePoint for front office review."
tags:
- risk
- market-risk
- calypso
- bloomberg
- sharepoint
capability:
exposes:
- type: mcp
namespace: risk-var
port: 8080
tools:
- name: generate-var-report
description: "Extract VaR metrics from Calypso, pull latest market data from Bloomberg, and publish a consolidated report to SharePoint."
inputParameters:
- name: desk_id
in: body
type: string
description: "The trading desk identifier."
- name: report_date
in: body
type: string
description: "The VaR report date in YYYY-MM-DD format."
steps:
- name: get-var-data
type: call
call: "calypso.get-var"
with:
desk_id: "{{desk_id}}"
date: "{{report_date}}"
- name: get-market-data
type: call
call: "bloomberg.get-market-snapshot"
with:
securities: "{{get-var-data.top_contributors}}"
date: "{{report_date}}"
- name: publish-report
type: call
call: "sharepoint.upload-file"
with:
site_id: "risk_reporting"
folder_path: "VaR/{{desk_id}}/{{report_date}}"
file_name: "var_report_{{desk_id}}_{{report_date}}.json"
consumes:
- type: http
namespace: calypso
baseUri: "https://calypso.citi.com/calypsoserver/api/v1"
authentication:
type: bearer
token: "$secrets.calypso_token"
resources:
- name: var-reports
path: "/risk/var?deskId={{desk_id}}&date={{date}}"
inputParameters:
- name: desk_id
in: query
- name: date
in: query
operations:
- name: get-var
method: GET
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: market-data
path: "/snapshots"
operations:
- name: get-market-snapshot
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-file
method: PUT
Retrieves electronic trade confirmation details from MarkitServ for OTC derivative trades.
naftiko: "0.5"
info:
label: "MarkitServ Trade Confirmation Lookup"
description: "Retrieves electronic trade confirmation details from MarkitServ for OTC derivative trades."
tags:
- derivatives
- markitserv
capability:
exposes:
- type: mcp
namespace: derivatives-markitserv
port: 8080
tools:
- name: get-trade-confirmation
description: "Fetch OTC derivative trade confirmation from MarkitServ."
inputParameters:
- name: confirmation_id
in: body
type: string
description: "The MarkitServ confirmation identifier."
call: "markitserv.get-confirmation"
with:
confirmation_id: "{{confirmation_id}}"
consumes:
- type: http
namespace: markitserv
baseUri: "https://api.markitserv.com/v1"
authentication:
type: bearer
token: "$secrets.markitserv_token"
resources:
- name: confirmations
path: "/confirmations/{{confirmation_id}}"
inputParameters:
- name: confirmation_id
in: path
operations:
- name: get-confirmation
method: GET
Retrieves the current Moody's credit rating and outlook for a given entity or instrument.
naftiko: "0.5"
info:
label: "Moody's Credit Rating Lookup"
description: "Retrieves the current Moody's credit rating and outlook for a given entity or instrument."
tags:
- credit-risk
- moodys
capability:
exposes:
- type: mcp
namespace: credit-risk-moodys
port: 8080
tools:
- name: get-credit-rating
description: "Fetch Moody's credit rating for an entity."
inputParameters:
- name: entity_id
in: body
type: string
description: "The Moody's entity identifier."
call: "moodys.get-rating"
with:
entity_id: "{{entity_id}}"
consumes:
- type: http
namespace: moodys
baseUri: "https://api.moodys.com/v1"
authentication:
type: bearer
token: "$secrets.moodys_token"
resources:
- name: ratings
path: "/ratings/{{entity_id}}"
inputParameters:
- name: entity_id
in: path
operations:
- name: get-rating
method: GET
Performs multi-currency netting by aggregating intercompany payables and receivables from SAP, calculating net positions, and executing settlements via CitiConnect with treasury notification.
naftiko: "0.5"
info:
label: "Multi-Currency Netting Orchestrator"
description: "Performs multi-currency netting by aggregating intercompany payables and receivables from SAP, calculating net positions, and executing settlements via CitiConnect with treasury notification."
tags:
- treasury
- sap
- citiconnect
- microsoft-teams
- netting
capability:
exposes:
- type: mcp
namespace: treasury-netting
port: 8080
tools:
- name: execute-netting-cycle
description: "Run a multi-currency netting cycle across intercompany positions."
inputParameters:
- name: netting_date
in: body
type: string
description: "The netting cycle date."
- name: netting_group
in: body
type: string
description: "The intercompany netting group."
steps:
- name: get-positions
type: call
call: "sap.get-intercompany-positions"
with:
netting_group: "{{netting_group}}"
date: "{{netting_date}}"
- name: calculate-nets
type: call
call: "netting-engine.calculate"
with:
positions: "{{get-positions.positions}}"
- name: execute-settlements
type: call
call: "citiconnect.create-bulk-transfer"
with:
settlements: "{{calculate-nets.net_settlements}}"
value_date: "{{netting_date}}"
- name: notify-treasury
type: call
call: "msteams.send-channel-message"
with:
team_id: "treasury"
channel_id: "netting"
text: "Netting cycle {{netting_date}} complete for group {{netting_group}}. {{calculate-nets.entity_count}} entities netted. Gross: {{get-positions.gross_total}}, Net: {{calculate-nets.net_total}}. Savings: {{calculate-nets.savings_pct}}%."
consumes:
- type: http
namespace: sap
baseUri: "https://sap.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: intercompany
path: "/intercompany/positions"
operations:
- name: get-intercompany-positions
method: GET
- type: http
namespace: netting-engine
baseUri: "https://netting.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.netting_token"
resources:
- name: calculations
path: "/calculate"
operations:
- name: calculate
method: POST
- type: http
namespace: citiconnect
baseUri: "https://citiconnect.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.citiconnect_token"
resources:
- name: bulk-transfers
path: "/bulk-transfers"
operations:
- name: create-bulk-transfer
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves a trade booking from the Murex trading system by trade ID, returning deal economics, counterparty, and lifecycle state.
naftiko: "0.5"
info:
label: "Murex Trade Booking Lookup"
description: "Retrieves a trade booking from the Murex trading system by trade ID, returning deal economics, counterparty, and lifecycle state."
tags:
- trading
- murex
- trade-lifecycle
capability:
exposes:
- type: mcp
namespace: trading-murex
port: 8080
tools:
- name: get-murex-trade
description: "Fetch a Murex trade by ID and return its deal type, notional, currency pair, counterparty, and status."
inputParameters:
- name: trade_id
in: body
type: string
description: "The Murex trade identifier."
call: "murex.get-trade"
with:
trade_id: "{{trade_id}}"
consumes:
- type: http
namespace: murex
baseUri: "https://murex.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.murex_token"
resources:
- name: trades
path: "/trades/{{trade_id}}"
inputParameters:
- name: trade_id
in: path
operations:
- name: get-trade
method: GET
On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for documents, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "New Hire Onboarding Orchestrator"
description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder for documents, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday employee ID and start date, orchestrate onboarding across ServiceNow, SharePoint, and Microsoft Teams."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID for the new hire."
- name: start_date
in: body
type: string
description: "The employee start date in YYYY-MM-DD format."
- name: department
in: body
type: string
description: "The department or business unit."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{workday_employee_id}}"
- name: open-ticket
type: call
call: "servicenow.create-record"
with:
table: "incident"
short_description: "New hire onboarding: {{get-employee.full_name}}"
category: "hr_onboarding"
assigned_group: "IT_Onboarding"
description: "Onboarding for {{get-employee.full_name}} starting {{start_date}} in {{department}}."
- name: provision-folder
type: call
call: "sharepoint.create-folder"
with:
site_id: "hr_onboarding_site"
folder_path: "OnboardingDocs/{{get-employee.full_name}}_{{start_date}}"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{get-employee.work_email}}"
text: "Welcome to Citi, {{get-employee.first_name}}! Your IT onboarding ticket is {{open-ticket.number}}. Documents are ready at {{provision-folder.url}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://citi.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: table-records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: create-folder
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Retrieves nostro account balances from Kyriba, compares against correspondent bank statements via SWIFT MT950, and raises breaks as ServiceNow incidents.
naftiko: "0.5"
info:
label: "Nostro Reconciliation Processor"
description: "Retrieves nostro account balances from Kyriba, compares against correspondent bank statements via SWIFT MT950, and raises breaks as ServiceNow incidents."
tags:
- treasury
- reconciliation
- kyriba
- swift
- servicenow
capability:
exposes:
- type: mcp
namespace: treasury-nostro-recon
port: 8080
tools:
- name: reconcile-nostro
description: "Compare Kyriba nostro balances with SWIFT MT950 correspondent statements and raise ServiceNow incidents for breaks."
inputParameters:
- name: nostro_account_id
in: body
type: string
description: "The Kyriba nostro account identifier."
- name: business_date
in: body
type: string
description: "The reconciliation date in YYYY-MM-DD format."
steps:
- name: get-kyriba-balance
type: call
call: "kyriba.get-nostro-balance"
with:
account_id: "{{nostro_account_id}}"
date: "{{business_date}}"
- name: get-swift-statement
type: call
call: "swift.get-mt950"
with:
account_id: "{{nostro_account_id}}"
date: "{{business_date}}"
- name: raise-break
type: call
call: "servicenow.create-record"
with:
table: "u_nostro_breaks"
short_description: "Nostro break: {{nostro_account_id}} on {{business_date}}"
description: "Kyriba balance: {{get-kyriba-balance.closing_balance}} {{get-kyriba-balance.currency}}. SWIFT MT950 balance: {{get-swift-statement.closing_balance}}. Difference: {{get-kyriba-balance.closing_balance}} vs {{get-swift-statement.closing_balance}}."
assigned_group: "Treasury_Recon"
consumes:
- type: http
namespace: kyriba
baseUri: "https://citi.kyriba.com/gateway/api/v1"
authentication:
type: bearer
token: "$secrets.kyriba_token"
resources:
- name: nostro-balances
path: "/nostro/{{account_id}}/balance?date={{date}}"
inputParameters:
- name: account_id
in: path
- name: date
in: query
operations:
- name: get-nostro-balance
method: GET
- type: http
namespace: swift
baseUri: "https://api.swiftnet.sipn.swift.com/fin/v1"
authentication:
type: bearer
token: "$secrets.swift_fin_token"
resources:
- name: statements
path: "/mt950?accountId={{account_id}}&date={{date}}"
inputParameters:
- name: account_id
in: query
- name: date
in: query
operations:
- name: get-mt950
method: GET
- type: http
namespace: servicenow
baseUri: "https://citi.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: table-records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Retrieves documents from OpenText Content Server by folder ID, returning document metadata, download links, and version history.
naftiko: "0.5"
info:
label: "OpenText Document Retrieval"
description: "Retrieves documents from OpenText Content Server by folder ID, returning document metadata, download links, and version history."
tags:
- operations
- opentext
- document-management
capability:
exposes:
- type: mcp
namespace: docs-opentext
port: 8080
tools:
- name: get-documents
description: "Fetch documents from OpenText Content Server by folder ID."
inputParameters:
- name: folder_id
in: body
type: string
description: "The OpenText folder node ID."
call: "opentext.get-documents"
with:
folder_id: "{{folder_id}}"
consumes:
- type: http
namespace: opentext
baseUri: "https://opentext.citi.com/otcs/v2"
authentication:
type: bearer
token: "$secrets.opentext_token"
resources:
- name: documents
path: "/nodes/{{folder_id}}/nodes"
inputParameters:
- name: folder_id
in: path
operations:
- name: get-documents
method: GET
Manages operational incident response by creating a ServiceNow incident, pulling system health from Datadog, and escalating to the on-call team via PagerDuty with Microsoft Teams notification.
naftiko: "0.5"
info:
label: "Operational Incident Response Pipeline"
description: "Manages operational incident response by creating a ServiceNow incident, pulling system health from Datadog, and escalating to the on-call team via PagerDuty with Microsoft Teams notification."
tags:
- operations
- servicenow
- datadog
- pagerduty
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: incident-response
port: 8080
tools:
- name: respond-to-incident
description: "Create incident, gather diagnostics, and escalate via PagerDuty."
inputParameters:
- name: service_name
in: body
type: string
description: "The affected service name."
- name: severity
in: body
type: string
description: "The incident severity (P1, P2, P3)."
- name: description
in: body
type: string
description: "The incident description."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "{{severity}} - {{service_name}}: {{description}}"
urgency: "1"
assignment_group: "{{service_name}}_support"
- name: get-health
type: call
call: "datadog.get-metrics"
with:
service_name: "{{service_name}}"
- name: page-oncall
type: call
call: "pagerduty.create-incident"
with:
service_id: "{{service_name}}"
title: "{{severity}} - {{service_name}}"
details: "{{description}}. CPU: {{get-health.cpu_pct}}%, Error rate: {{get-health.error_rate}}%. ServiceNow: {{create-incident.number}}."
- name: notify-team
type: call
call: "msteams.send-channel-message"
with:
team_id: "technology"
channel_id: "incidents"
text: "{{severity}} incident for {{service_name}}: {{description}}. ServiceNow: {{create-incident.number}}. PagerDuty: {{page-oncall.incident_id}}."
consumes:
- type: http
namespace: servicenow
baseUri: "https://citi.service-now.com/api/now/table"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
name: DD-API-KEY
in: header
value: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/query"
operations:
- name: get-metrics
method: GET
- 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
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Logs an operational risk event by creating a record in the ServiceNow GRC module and notifying the risk committee chair via Microsoft Teams.
naftiko: "0.5"
info:
label: "Operational Risk Event Logger"
description: "Logs an operational risk event by creating a record in the ServiceNow GRC module and notifying the risk committee chair via Microsoft Teams."
tags:
- risk
- operational-risk
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: risk-oprisk
port: 8080
tools:
- name: log-oprisk-event
description: "Log an operational risk event in ServiceNow GRC and notify the risk committee chair via Teams."
inputParameters:
- name: event_description
in: body
type: string
description: "Description of the operational risk event."
- name: risk_category
in: body
type: string
description: "Basel risk category (e.g., EXECUTION, FRAUD, SYSTEMS)."
- name: estimated_loss
in: body
type: number
description: "Estimated financial loss in USD."
- name: committee_chair_email
in: body
type: string
description: "Risk committee chair email for notification."
steps:
- name: create-event
type: call
call: "servicenow.create-record"
with:
table: "sn_grc_risk_event"
short_description: "Op risk event: {{risk_category}}"
description: "{{event_description}}. Category: {{risk_category}}. Estimated loss: ${{estimated_loss}} USD."
priority: "1"
- name: notify-chair
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{committee_chair_email}}"
text: "Operational risk event reported. Category: {{risk_category}}. Estimated loss: ${{estimated_loss}} USD. ServiceNow: {{create-event.number}}. Description: {{event_description}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://citi.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: table-records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Screens an outbound payment against OFAC and EU sanctions lists via Refinitiv World-Check and notifies the compliance team via Microsoft Teams with results.
naftiko: "0.5"
info:
label: "Payment Sanctions Screening Pipeline"
description: "Screens an outbound payment against OFAC and EU sanctions lists via Refinitiv World-Check and notifies the compliance team via Microsoft Teams with results."
tags:
- compliance
- sanctions
- refinitiv
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sanctions-screening
port: 8080
tools:
- name: screen-payment
description: "Screen payment against sanctions lists and notify compliance."
inputParameters:
- name: payment_ref
in: body
type: string
description: "The payment reference."
- name: beneficiary_name
in: body
type: string
description: "The beneficiary name."
- name: beneficiary_country
in: body
type: string
description: "The beneficiary country code."
steps:
- name: screen-ofac
type: call
call: "refinitiv.screen-entity"
with:
entity_name: "{{beneficiary_name}}"
country: "{{beneficiary_country}}"
list_type: "OFAC"
- name: screen-eu
type: call
call: "refinitiv.screen-entity"
with:
entity_name: "{{beneficiary_name}}"
country: "{{beneficiary_country}}"
list_type: "EU"
- name: notify-compliance
type: call
call: "msteams.send-channel-message"
with:
team_id: "compliance"
channel_id: "sanctions"
text: "Sanctions screening for payment {{payment_ref}}: OFAC {{screen-ofac.match_status}}, EU {{screen-eu.match_status}}. Beneficiary: {{beneficiary_name}} ({{beneficiary_country}})."
consumes:
- type: http
namespace: refinitiv
baseUri: "https://api.refinitiv.com/worldcheck/v2"
authentication:
type: bearer
token: "$secrets.refinitiv_wc_token"
resources:
- name: screening
path: "/screening"
operations:
- name: screen-entity
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves a Pegasystems case by ID, returning its current stage, assigned worker, SLA status, and key milestones.
naftiko: "0.5"
info:
label: "Pega Case Status Lookup"
description: "Retrieves a Pegasystems case by ID, returning its current stage, assigned worker, SLA status, and key milestones."
tags:
- operations
- pega
- case-management
capability:
exposes:
- type: mcp
namespace: ops-pega
port: 8080
tools:
- name: get-pega-case
description: "Look up a Pega case by ID and return its stage, assignment, and SLA details."
inputParameters:
- name: case_id
in: body
type: string
description: "The Pega case identifier."
call: "pega.get-case"
with:
case_id: "{{case_id}}"
consumes:
- type: http
namespace: pega
baseUri: "https://pega.citi.com/prweb/api/v1"
authentication:
type: bearer
token: "$secrets.pega_token"
resources:
- name: cases
path: "/cases/{{case_id}}"
inputParameters:
- name: case_id
in: path
operations:
- name: get-case
method: GET
Rebalances a wealth management portfolio by fetching current allocations from Calypso, computing optimal weights via the ML engine, generating trade orders, and notifying the portfolio manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "Portfolio Rebalancing Orchestrator"
description: "Rebalances a wealth management portfolio by fetching current allocations from Calypso, computing optimal weights via the ML engine, generating trade orders, and notifying the portfolio manager via Microsoft Teams."
tags:
- wealth-management
- calypso
- machine-learning
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: wealth-rebalance
port: 8080
tools:
- name: rebalance-portfolio
description: "Run portfolio rebalancing with current allocation analysis, ML optimization, and notification."
inputParameters:
- name: portfolio_id
in: body
type: string
description: "The portfolio identifier."
- name: risk_tolerance
in: body
type: string
description: "The client risk tolerance (conservative, moderate, aggressive)."
steps:
- name: get-allocations
type: call
call: "calypso.get-positions"
with:
portfolio_id: "{{portfolio_id}}"
- name: compute-weights
type: call
call: "ml-engine.optimize-portfolio"
with:
portfolio_id: "{{portfolio_id}}"
current_positions: "{{get-allocations.positions}}"
risk_tolerance: "{{risk_tolerance}}"
- name: generate-orders
type: call
call: "calypso.create-rebalance-orders"
with:
portfolio_id: "{{portfolio_id}}"
target_weights: "{{compute-weights.target_weights}}"
- name: notify-pm
type: call
call: "msteams.send-channel-message"
with:
team_id: "wealth_mgmt"
channel_id: "rebalancing"
text: "Portfolio {{portfolio_id}} rebalanced. {{generate-orders.order_count}} orders generated. Expected tracking error: {{compute-weights.tracking_error}}%."
consumes:
- type: http
namespace: calypso
baseUri: "https://calypso.citi.com/api/v4"
authentication:
type: bearer
token: "$secrets.calypso_token"
resources:
- name: positions
path: "/portfolios/{{portfolio_id}}/positions"
inputParameters:
- name: portfolio_id
in: path
operations:
- name: get-positions
method: GET
- name: rebalance
path: "/portfolios/{{portfolio_id}}/rebalance"
inputParameters:
- name: portfolio_id
in: path
operations:
- name: create-rebalance-orders
method: POST
- type: http
namespace: ml-engine
baseUri: "https://ml.citi.com/portfolio/v1"
authentication:
type: bearer
token: "$secrets.ml_engine_token"
resources:
- name: optimization
path: "/optimize"
operations:
- name: optimize-portfolio
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Processes a prime brokerage margin call by calculating exposure in Calypso, generating the margin call in Broadridge, and notifying the client relationship manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "Prime Brokerage Margin Call Pipeline"
description: "Processes a prime brokerage margin call by calculating exposure in Calypso, generating the margin call in Broadridge, and notifying the client relationship manager via Microsoft Teams."
tags:
- prime-brokerage
- calypso
- broadridge
- microsoft-teams
- margin
capability:
exposes:
- type: mcp
namespace: pb-margin
port: 8080
tools:
- name: process-margin-call
description: "Calculate exposure, issue margin call, and notify the relationship manager."
inputParameters:
- name: client_id
in: body
type: string
description: "The prime brokerage client identifier."
steps:
- name: calculate-exposure
type: call
call: "calypso.get-exposure"
with:
client_id: "{{client_id}}"
- name: issue-margin-call
type: call
call: "broadridge.create-margin-call"
with:
client_id: "{{client_id}}"
exposure: "{{calculate-exposure.net_exposure}}"
required_margin: "{{calculate-exposure.required_margin}}"
- name: notify-rm
type: call
call: "msteams.send-channel-message"
with:
team_id: "prime_brokerage"
channel_id: "margin_calls"
text: "Margin call issued for client {{client_id}}. Net exposure: {{calculate-exposure.net_exposure}}. Required: {{calculate-exposure.required_margin}}. Call ref: {{issue-margin-call.margin_call_ref}}."
consumes:
- type: http
namespace: calypso
baseUri: "https://calypso.citi.com/api/v4"
authentication:
type: bearer
token: "$secrets.calypso_token"
resources:
- name: exposures
path: "/exposures/{{client_id}}"
inputParameters:
- name: client_id
in: path
operations:
- name: get-exposure
method: GET
- type: http
namespace: broadridge
baseUri: "https://broadridge.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.broadridge_token"
resources:
- name: margin-calls
path: "/margin-calls"
operations:
- name: create-margin-call
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Fetches security reference data from Refinitiv Eikon including issuer, maturity, coupon, and credit rating.
naftiko: "0.5"
info:
label: "Refinitiv Eikon Security Lookup"
description: "Fetches security reference data from Refinitiv Eikon including issuer, maturity, coupon, and credit rating."
tags:
- markets
- refinitiv
capability:
exposes:
- type: mcp
namespace: markets-refinitiv
port: 8080
tools:
- name: get-security-reference
description: "Retrieve security reference data from Refinitiv Eikon."
inputParameters:
- name: ric
in: body
type: string
description: "The Reuters Instrument Code."
call: "refinitiv.get-security"
with:
ric: "{{ric}}"
consumes:
- type: http
namespace: refinitiv
baseUri: "https://api.refinitiv.com/data/pricing/v1"
authentication:
type: bearer
token: "$secrets.refinitiv_token"
resources:
- name: securities
path: "/{{ric}}"
inputParameters:
- name: ric
in: path
operations:
- name: get-security
method: GET
Screens a client entity name against the Refinitiv World-Check database for sanctions, PEP status, and adverse media hits.
naftiko: "0.5"
info:
label: "Refinitiv World-Check Entity Screening"
description: "Screens a client entity name against the Refinitiv World-Check database for sanctions, PEP status, and adverse media hits."
tags:
- compliance
- aml
- refinitiv
- world-check
- sanctions
capability:
exposes:
- type: mcp
namespace: compliance-screening
port: 8080
tools:
- name: screen-entity
description: "Screen a named entity against Refinitiv World-Check for sanctions, PEP, and adverse media matches."
inputParameters:
- name: entity_name
in: body
type: string
description: "The full name of the entity to screen."
- name: entity_type
in: body
type: string
description: "Entity type: INDIVIDUAL or ORGANISATION."
call: "world-check.screen-entity"
with:
entity_name: "{{entity_name}}"
entity_type: "{{entity_type}}"
consumes:
- type: http
namespace: world-check
baseUri: "https://api.refinitiv.com/world-check/v2"
authentication:
type: bearer
token: "$secrets.refinitiv_token"
resources:
- name: screening
path: "/cases/screeningRequest"
operations:
- name: screen-entity
method: POST
Calculates regulatory capital requirements by extracting risk-weighted assets from AxiomSL, computing capital ratios, and submitting the report to the regulatory reporting system with notification to the CFO office.
naftiko: "0.5"
info:
label: "Regulatory Capital Calculation Pipeline"
description: "Calculates regulatory capital requirements by extracting risk-weighted assets from AxiomSL, computing capital ratios, and submitting the report to the regulatory reporting system with notification to the CFO office."
tags:
- regulatory
- axiom-sl
- microsoft-teams
- capital
capability:
exposes:
- type: mcp
namespace: regulatory-capital
port: 8080
tools:
- name: calculate-regulatory-capital
description: "Run regulatory capital calculation pipeline with AxiomSL data extraction and reporting."
inputParameters:
- name: reporting_date
in: body
type: string
description: "The reporting date (YYYY-MM-DD)."
- name: entity_code
in: body
type: string
description: "The legal entity code."
steps:
- name: extract-rwa
type: call
call: "axiomsl.get-report-data"
with:
report_type: "rwa_summary"
reporting_date: "{{reporting_date}}"
entity: "{{entity_code}}"
- name: submit-report
type: call
call: "reg-reporting.submit-capital-report"
with:
entity: "{{entity_code}}"
reporting_date: "{{reporting_date}}"
total_rwa: "{{extract-rwa.total_rwa}}"
tier1_capital: "{{extract-rwa.tier1_capital}}"
- name: notify-cfo
type: call
call: "msteams.send-channel-message"
with:
team_id: "finance"
channel_id: "regulatory_capital"
text: "Capital report for {{entity_code}} ({{reporting_date}}): RWA {{extract-rwa.total_rwa}}, Tier 1 ratio {{submit-report.tier1_ratio}}%. Report ID: {{submit-report.report_id}}."
consumes:
- type: http
namespace: axiomsl
baseUri: "https://axiomsl.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.axiomsl_token"
resources:
- name: reports
path: "/reports"
operations:
- name: get-report-data
method: POST
- type: http
namespace: reg-reporting
baseUri: "https://reg-reporting.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.reg_reporting_token"
resources:
- name: capital-reports
path: "/capital-reports"
operations:
- name: submit-capital-report
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Extracts regulatory data from Axiom SL, validates it against internal controls in ServiceNow, and submits the final report to the regulator portal with an audit log entry.
naftiko: "0.5"
info:
label: "Regulatory Report Submission Pipeline"
description: "Extracts regulatory data from Axiom SL, validates it against internal controls in ServiceNow, and submits the final report to the regulator portal with an audit log entry."
tags:
- compliance
- regulatory-reporting
- axiom-sl
- servicenow
capability:
exposes:
- type: mcp
namespace: compliance-reporting
port: 8080
tools:
- name: submit-regulatory-report
description: "Extract a regulatory report from Axiom SL, validate controls in ServiceNow, and log the submission for audit."
inputParameters:
- name: report_id
in: body
type: string
description: "The Axiom SL report identifier."
- name: reporting_period
in: body
type: string
description: "The reporting period in YYYY-MM format."
- name: regulator
in: body
type: string
description: "The target regulator code (e.g., FED, OCC, PRA)."
steps:
- name: extract-report
type: call
call: "axiom-sl.get-report"
with:
report_id: "{{report_id}}"
period: "{{reporting_period}}"
- name: validate-controls
type: call
call: "servicenow.get-controls"
with:
report_id: "{{report_id}}"
category: "regulatory_{{regulator}}"
- name: log-submission
type: call
call: "servicenow.create-record"
with:
table: "u_regulatory_submissions"
short_description: "Submitted {{report_id}} for {{reporting_period}} to {{regulator}}"
description: "Report: {{report_id}}. Period: {{reporting_period}}. Regulator: {{regulator}}. Control status: {{validate-controls.overall_status}}. Data rows: {{extract-report.row_count}}."
consumes:
- type: http
namespace: axiom-sl
baseUri: "https://axiom.citi.com/controller/api/v1"
authentication:
type: bearer
token: "$secrets.axiom_sl_token"
resources:
- name: reports
path: "/reports/{{report_id}}?period={{period}}"
inputParameters:
- name: report_id
in: path
- name: period
in: query
operations:
- name: get-report
method: GET
- type: http
namespace: servicenow
baseUri: "https://citi.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: controls
path: "/table/u_controls?sysparm_query=report_id={{report_id}}^category={{category}}"
inputParameters:
- name: report_id
in: query
- name: category
in: query
operations:
- name: get-controls
method: GET
- name: table-records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Manages the lifecycle of a repurchase agreement by booking the opening leg in Calypso, registering collateral in Broadridge, and scheduling the closing leg notification via Microsoft Teams.
naftiko: "0.5"
info:
label: "Repo Trade Lifecycle Processor"
description: "Manages the lifecycle of a repurchase agreement by booking the opening leg in Calypso, registering collateral in Broadridge, and scheduling the closing leg notification via Microsoft Teams."
tags:
- fixed-income
- calypso
- broadridge
- microsoft-teams
- repo
capability:
exposes:
- type: mcp
namespace: fi-repo
port: 8080
tools:
- name: process-repo-trade
description: "Book repo opening leg, register collateral, and schedule closing notification."
inputParameters:
- name: security_id
in: body
type: string
description: "The collateral security ISIN."
- name: notional
in: body
type: number
description: "The repo notional amount."
- name: repo_rate
in: body
type: number
description: "The repo rate."
- name: term_days
in: body
type: number
description: "The repo term in days."
steps:
- name: book-opening
type: call
call: "calypso.create-trade"
with:
product_type: "repo"
security_id: "{{security_id}}"
notional: "{{notional}}"
rate: "{{repo_rate}}"
term: "{{term_days}}"
- name: register-collateral
type: call
call: "broadridge.register-collateral"
with:
trade_id: "{{book-opening.trade_id}}"
security_id: "{{security_id}}"
notional: "{{notional}}"
- name: notify-desk
type: call
call: "msteams.send-channel-message"
with:
team_id: "fixed_income"
channel_id: "repo_desk"
text: "Repo booked: {{book-opening.trade_id}}. Security: {{security_id}}, Notional: {{notional}}, Rate: {{repo_rate}}%, Term: {{term_days}}d. Collateral ref: {{register-collateral.collateral_ref}}."
consumes:
- type: http
namespace: calypso
baseUri: "https://calypso.citi.com/api/v4"
authentication:
type: bearer
token: "$secrets.calypso_token"
resources:
- name: trades
path: "/trades"
operations:
- name: create-trade
method: POST
- type: http
namespace: broadridge
baseUri: "https://broadridge.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.broadridge_token"
resources:
- name: collateral
path: "/collateral"
operations:
- name: register-collateral
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves a Salesforce CRM client account by ID, returning account name, type, relationship manager, and associated opportunities.
naftiko: "0.5"
info:
label: "Salesforce Client Account Lookup"
description: "Retrieves a Salesforce CRM client account by ID, returning account name, type, relationship manager, and associated opportunities."
tags:
- corporate-banking
- crm
- salesforce
capability:
exposes:
- type: mcp
namespace: crm-account
port: 8080
tools:
- name: get-client-account
description: "Fetch a Salesforce client account by ID and return its details, RM assignment, and pipeline."
inputParameters:
- name: account_id
in: body
type: string
description: "The Salesforce account identifier."
call: "salesforce.get-account"
with:
account_id: "{{account_id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://citi.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
Retrieves a Salesforce CRM opportunity by ID, returning stage, deal size, expected close date, and account details.
naftiko: "0.5"
info:
label: "Salesforce CRM Opportunity Lookup"
description: "Retrieves a Salesforce CRM opportunity by ID, returning stage, deal size, expected close date, and account details."
tags:
- corporate-banking
- crm
- salesforce
capability:
exposes:
- type: mcp
namespace: crm-salesforce
port: 8080
tools:
- name: get-opportunity
description: "Fetch a Salesforce opportunity by ID and return its stage, amount, close date, and account name."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce opportunity identifier."
call: "salesforce.get-opportunity"
with:
opportunity_id: "{{opportunity_id}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://citi.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: get-opportunity
method: GET
When a Refinitiv World-Check screening returns potential hits, creates an investigation case in Actimize and notifies the compliance officer via ServiceNow and Teams.
naftiko: "0.5"
info:
label: "Sanctions Screening Escalation"
description: "When a Refinitiv World-Check screening returns potential hits, creates an investigation case in Actimize and notifies the compliance officer via ServiceNow and Teams."
tags:
- compliance
- sanctions
- refinitiv
- actimize
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: compliance-sanctions
port: 8080
tools:
- name: escalate-sanctions-hit
description: "Given a World-Check screening result with potential matches, open an Actimize investigation, log in ServiceNow, and notify compliance via Teams."
inputParameters:
- name: screening_case_id
in: body
type: string
description: "The Refinitiv World-Check case ID with potential hits."
- name: compliance_officer_email
in: body
type: string
description: "The compliance officer email for Teams notification."
steps:
- name: get-screening
type: call
call: "world-check.get-case"
with:
case_id: "{{screening_case_id}}"
- name: create-investigation
type: call
call: "actimize.create-investigation"
with:
entity_name: "{{get-screening.entity_name}}"
match_count: "{{get-screening.potential_match_count}}"
screening_id: "{{screening_case_id}}"
- name: log-incident
type: call
call: "servicenow.create-record"
with:
table: "u_sanctions_investigations"
short_description: "Sanctions screening escalation: {{get-screening.entity_name}}"
description: "World-Check case {{screening_case_id}} returned {{get-screening.potential_match_count}} potential matches. Actimize investigation: {{create-investigation.investigation_id}}."
- name: notify-officer
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{compliance_officer_email}}"
text: "Sanctions alert: {{get-screening.entity_name}} has {{get-screening.potential_match_count}} potential World-Check matches. Investigation {{create-investigation.investigation_id}} opened. Please review."
consumes:
- type: http
namespace: world-check
baseUri: "https://api.refinitiv.com/world-check/v2"
authentication:
type: bearer
token: "$secrets.refinitiv_token"
resources:
- name: cases
path: "/cases/{{case_id}}"
inputParameters:
- name: case_id
in: path
operations:
- name: get-case
method: GET
- type: http
namespace: actimize
baseUri: "https://actimize.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.actimize_token"
resources:
- name: investigations
path: "/investigations"
operations:
- name: create-investigation
method: POST
- type: http
namespace: servicenow
baseUri: "https://citi.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: table-records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Processes a securities lending return by looking up the borrow in Broadridge, submitting the return instruction via DTCC, and notifying the securities lending desk in Microsoft Teams.
naftiko: "0.5"
info:
label: "Securities Lending Return Processor"
description: "Processes a securities lending return by looking up the borrow in Broadridge, submitting the return instruction via DTCC, and notifying the securities lending desk in Microsoft Teams."
tags:
- securities-lending
- broadridge
- dtcc
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: sec-lending
port: 8080
tools:
- name: process-lending-return
description: "Process securities lending return through Broadridge, DTCC, and notify the desk."
inputParameters:
- name: borrow_ref
in: body
type: string
description: "The Broadridge borrow reference."
- name: return_quantity
in: body
type: number
description: "Number of shares to return."
steps:
- name: get-borrow
type: call
call: "broadridge.get-borrow"
with:
borrow_ref: "{{borrow_ref}}"
- name: submit-return
type: call
call: "dtcc.create-return"
with:
borrow_ref: "{{borrow_ref}}"
security_id: "{{get-borrow.security_id}}"
quantity: "{{return_quantity}}"
- name: notify-desk
type: call
call: "msteams.send-channel-message"
with:
team_id: "sec_lending"
channel_id: "returns"
text: "Return submitted for {{get-borrow.security_id}}: {{return_quantity}} shares. DTCC ref: {{submit-return.return_ref}}. Original borrow: {{borrow_ref}}."
consumes:
- type: http
namespace: broadridge
baseUri: "https://broadridge.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.broadridge_token"
resources:
- name: borrows
path: "/borrows/{{borrow_ref}}"
inputParameters:
- name: borrow_ref
in: path
operations:
- name: get-borrow
method: GET
- type: http
namespace: dtcc
baseUri: "https://api.dtcc.com/v2"
authentication:
type: bearer
token: "$secrets.dtcc_token"
resources:
- name: returns
path: "/returns"
operations:
- name: create-return
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves a ServiceNow change request by ID including approval status, risk assessment, and implementation schedule.
naftiko: "0.5"
info:
label: "ServiceNow Change Request Lookup"
description: "Retrieves a ServiceNow change request by ID including approval status, risk assessment, and implementation schedule."
tags:
- operations
- servicenow
capability:
exposes:
- type: mcp
namespace: ops-servicenow
port: 8080
tools:
- name: get-change-request
description: "Fetch a change request from ServiceNow."
inputParameters:
- name: change_id
in: body
type: string
description: "The ServiceNow change request ID."
call: "servicenow.get-change"
with:
change_id: "{{change_id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://citi.service-now.com/api/now/table"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: change-requests
path: "/change_request/{{change_id}}"
inputParameters:
- name: change_id
in: path
operations:
- name: get-change
method: GET
Retrieves a ServiceNow incident by number, returning its state, priority, assigned group, and resolution notes.
naftiko: "0.5"
info:
label: "ServiceNow Incident Lookup"
description: "Retrieves a ServiceNow incident by number, returning its state, priority, assigned group, and resolution notes."
tags:
- operations
- servicenow
- incident
capability:
exposes:
- type: mcp
namespace: ops-servicenow
port: 8080
tools:
- name: get-incident
description: "Look up a ServiceNow incident by number and return its current state, priority, and assignment."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number (e.g., INC0012345)."
call: "servicenow.get-incident"
with:
incident_number: "{{incident_number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://citi.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident?sysparm_query=number={{incident_number}}"
inputParameters:
- name: incident_number
in: query
operations:
- name: get-incident
method: GET
Executes a security log search query in Splunk and returns matching events for security operations analysis.
naftiko: "0.5"
info:
label: "Splunk Security Log Query"
description: "Executes a security log search query in Splunk and returns matching events for security operations analysis."
tags:
- security
- splunk
capability:
exposes:
- type: mcp
namespace: security-splunk
port: 8080
tools:
- name: search-security-logs
description: "Run a security log search in Splunk."
inputParameters:
- name: search_query
in: body
type: string
description: "The Splunk search query string."
call: "splunk.create-search"
with:
search: "{{search_query}}"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.citi.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search-jobs
path: "/search/jobs"
operations:
- name: create-search
method: POST
Prices a structured product by fetching market data from Bloomberg, running Monte Carlo simulation in the pricing engine, and storing results in Murex with notification to the structuring desk.
naftiko: "0.5"
info:
label: "Structured Product Pricing Pipeline"
description: "Prices a structured product by fetching market data from Bloomberg, running Monte Carlo simulation in the pricing engine, and storing results in Murex with notification to the structuring desk."
tags:
- structured-products
- bloomberg
- murex
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: structured-products
port: 8080
tools:
- name: price-structured-product
description: "Price a structured product with market data, simulation, and booking."
inputParameters:
- name: product_id
in: body
type: string
description: "The structured product identifier."
- name: underlying
in: body
type: string
description: "The underlying asset ticker."
steps:
- name: get-market-data
type: call
call: "bloomberg.get-snapshot"
with:
security_id: "{{underlying}}"
- name: run-pricing
type: call
call: "pricing-engine.monte-carlo"
with:
product_id: "{{product_id}}"
spot_price: "{{get-market-data.last_price}}"
volatility: "{{get-market-data.implied_vol}}"
- name: book-result
type: call
call: "murex.update-trade"
with:
product_id: "{{product_id}}"
theoretical_value: "{{run-pricing.fair_value}}"
delta: "{{run-pricing.delta}}"
- name: notify-desk
type: call
call: "msteams.send-channel-message"
with:
team_id: "structuring"
channel_id: "pricing"
text: "Structured product {{product_id}} priced. Underlying: {{underlying}} at {{get-market-data.last_price}}. Fair value: {{run-pricing.fair_value}}. Delta: {{run-pricing.delta}}."
consumes:
- type: http
namespace: bloomberg
baseUri: "https://bsapi.bloomberg.com/eap/catalogs/bbg/datasets"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: snapshots
path: "/snapshots/{{security_id}}"
inputParameters:
- name: security_id
in: path
operations:
- name: get-snapshot
method: GET
- type: http
namespace: pricing-engine
baseUri: "https://pricing.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.pricing_engine_token"
resources:
- name: monte-carlo
path: "/monte-carlo"
operations:
- name: monte-carlo
method: POST
- type: http
namespace: murex
baseUri: "https://murex.citi.com/api/v3"
authentication:
type: bearer
token: "$secrets.murex_token"
resources:
- name: trades
path: "/trades/{{product_id}}"
inputParameters:
- name: product_id
in: path
operations:
- name: update-trade
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Queries the SWIFT gpi tracker for real-time payment status by UETR, returning settlement chain and fees charged.
naftiko: "0.5"
info:
label: "SWIFT Payment Status Lookup"
description: "Queries the SWIFT gpi tracker for real-time payment status by UETR, returning settlement chain and fees charged."
tags:
- payments
- swift
- gpi
capability:
exposes:
- type: mcp
namespace: payments-swift
port: 8080
tools:
- name: get-swift-payment-status
description: "Look up a SWIFT gpi payment by UETR and return its current settlement status, intermediary chain, and total fees."
inputParameters:
- name: uetr
in: body
type: string
description: "The Unique End-to-end Transaction Reference for the SWIFT payment."
call: "swift-gpi.get-payment-status"
with:
uetr: "{{uetr}}"
consumes:
- type: http
namespace: swift-gpi
baseUri: "https://api.swiftnet.sipn.swift.com/gpi/v4"
authentication:
type: bearer
token: "$secrets.swift_gpi_token"
resources:
- name: payment-transactions
path: "/payment_transactions/{{uetr}}"
inputParameters:
- name: uetr
in: path
operations:
- name: get-payment-status
method: GET
Processes a syndicated loan allocation by retrieving facility details from LoanIQ, booking allocations in Calypso, and emailing confirmation to syndicate members via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Syndicated Loan Allocation Processor"
description: "Processes a syndicated loan allocation by retrieving facility details from LoanIQ, booking allocations in Calypso, and emailing confirmation to syndicate members via Microsoft Outlook."
tags:
- lending
- loan-iq
- calypso
- microsoft-outlook
- syndication
capability:
exposes:
- type: mcp
namespace: syndicated-lending
port: 8080
tools:
- name: process-loan-allocation
description: "Process syndicated loan allocation across LoanIQ, Calypso, and email confirmations."
inputParameters:
- name: facility_id
in: body
type: string
description: "The LoanIQ facility identifier."
- name: allocation_amount
in: body
type: number
description: "The total allocation amount."
steps:
- name: get-facility
type: call
call: "loaniq.get-facility"
with:
facility_id: "{{facility_id}}"
- name: book-allocation
type: call
call: "calypso.create-trade"
with:
product_type: "syndicated_loan"
facility_id: "{{facility_id}}"
amount: "{{allocation_amount}}"
currency: "{{get-facility.currency}}"
- name: send-confirmation
type: call
call: "outlook.send-mail"
with:
to: "{{get-facility.agent_email}}"
subject: "Loan Allocation Confirmation - {{facility_id}}"
body: "Allocation of {{allocation_amount}} {{get-facility.currency}} booked for facility {{facility_id}}. Calypso ref: {{book-allocation.trade_id}}."
consumes:
- type: http
namespace: loaniq
baseUri: "https://loaniq.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.loaniq_token"
resources:
- name: facilities
path: "/facilities/{{facility_id}}"
inputParameters:
- name: facility_id
in: path
operations:
- name: get-facility
method: GET
- type: http
namespace: calypso
baseUri: "https://calypso.citi.com/api/v4"
authentication:
type: bearer
token: "$secrets.calypso_token"
resources:
- name: trades
path: "/trades"
operations:
- name: create-trade
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-mail
method: POST
Retrieves customer account details from the Temenos T24 core banking system including balance, status, and product type.
naftiko: "0.5"
info:
label: "Temenos Core Account Lookup"
description: "Retrieves customer account details from the Temenos T24 core banking system including balance, status, and product type."
tags:
- core-banking
- temenos
capability:
exposes:
- type: mcp
namespace: core-banking-temenos
port: 8080
tools:
- name: get-account
description: "Fetch account details from Temenos T24 core banking."
inputParameters:
- name: account_id
in: body
type: string
description: "The Temenos account identifier."
call: "temenos.get-account"
with:
account_id: "{{account_id}}"
consumes:
- type: http
namespace: temenos
baseUri: "https://temenos.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.temenos_token"
resources:
- name: accounts
path: "/accounts/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
Resolves a trade break by comparing Calypso and Broadridge records, logging a ServiceNow incident, and notifying the operations team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Trade Break Resolution Pipeline"
description: "Resolves a trade break by comparing Calypso and Broadridge records, logging a ServiceNow incident, and notifying the operations team via Microsoft Teams."
tags:
- operations
- calypso
- broadridge
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: trade-ops
port: 8080
tools:
- name: resolve-trade-break
description: "Investigate and escalate a trade break across Calypso, Broadridge, ServiceNow, and Teams."
inputParameters:
- name: trade_id
in: body
type: string
description: "The internal trade identifier."
steps:
- name: get-calypso-record
type: call
call: "calypso.get-trade"
with:
trade_id: "{{trade_id}}"
- name: get-broadridge-record
type: call
call: "broadridge.get-trade"
with:
trade_id: "{{trade_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Trade break: {{trade_id}}"
description: "Calypso status: {{get-calypso-record.status}}, Broadridge status: {{get-broadridge-record.status}}"
urgency: "2"
- name: notify-ops
type: call
call: "msteams.send-channel-message"
with:
team_id: "trade_ops"
channel_id: "breaks"
text: "Trade break detected for {{trade_id}}. Calypso: {{get-calypso-record.status}}, Broadridge: {{get-broadridge-record.status}}. ServiceNow: {{create-incident.number}}."
consumes:
- type: http
namespace: calypso
baseUri: "https://calypso.citi.com/api/v4"
authentication:
type: bearer
token: "$secrets.calypso_token"
resources:
- name: trades
path: "/trades/{{trade_id}}"
inputParameters:
- name: trade_id
in: path
operations:
- name: get-trade
method: GET
- type: http
namespace: broadridge
baseUri: "https://broadridge.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.broadridge_token"
resources:
- name: trades
path: "/trades/{{trade_id}}"
inputParameters:
- name: trade_id
in: path
operations:
- name: get-trade
method: GET
- type: http
namespace: servicenow
baseUri: "https://citi.service-now.com/api/now/table"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Retrieves an unmatched trade from Calypso, looks up the counterparty confirmation in Markitwire, and updates the match status in Calypso when confirmed.
naftiko: "0.5"
info:
label: "Trade Confirmation Matching"
description: "Retrieves an unmatched trade from Calypso, looks up the counterparty confirmation in Markitwire, and updates the match status in Calypso when confirmed."
tags:
- trading
- post-trade
- calypso
- markitwire
capability:
exposes:
- type: mcp
namespace: post-trade
port: 8080
tools:
- name: match-trade-confirmation
description: "Given a Calypso trade ID, check Markitwire for counterparty confirmation and update match status in Calypso."
inputParameters:
- name: trade_id
in: body
type: string
description: "The Calypso trade identifier."
steps:
- name: get-trade
type: call
call: "calypso.get-trade"
with:
trade_id: "{{trade_id}}"
- name: check-confirmation
type: call
call: "markitwire.get-confirmation"
with:
trade_reference: "{{get-trade.external_reference}}"
counterparty: "{{get-trade.counterparty_id}}"
- name: update-match
type: call
call: "calypso.update-trade-status"
with:
trade_id: "{{trade_id}}"
match_status: "{{check-confirmation.match_status}}"
confirmed_at: "{{check-confirmation.confirmation_timestamp}}"
consumes:
- type: http
namespace: calypso
baseUri: "https://calypso.citi.com/calypsoserver/api/v1"
authentication:
type: bearer
token: "$secrets.calypso_token"
resources:
- name: trades
path: "/trades/{{trade_id}}"
inputParameters:
- name: trade_id
in: path
operations:
- name: get-trade
method: GET
- name: update-trade-status
method: PATCH
- type: http
namespace: markitwire
baseUri: "https://markitwire.ihsmarkit.com/api/v1"
authentication:
type: bearer
token: "$secrets.markitwire_token"
resources:
- name: confirmations
path: "/confirmations?tradeRef={{trade_reference}}&counterparty={{counterparty}}"
inputParameters:
- name: trade_reference
in: query
- name: counterparty
in: query
operations:
- name: get-confirmation
method: GET
Extracts trade data from Calypso, formats it per EMIR/Dodd-Frank requirements, and submits to DTCC trade repository with an audit trail in ServiceNow.
naftiko: "0.5"
info:
label: "Trade Regulatory Reporting Pipeline"
description: "Extracts trade data from Calypso, formats it per EMIR/Dodd-Frank requirements, and submits to DTCC trade repository with an audit trail in ServiceNow."
tags:
- compliance
- trade-reporting
- calypso
- dtcc
- servicenow
- emir
capability:
exposes:
- type: mcp
namespace: trade-reporting
port: 8080
tools:
- name: report-trade
description: "Extract trade data from Calypso, submit to DTCC trade repository for regulatory reporting, and log in ServiceNow."
inputParameters:
- name: trade_id
in: body
type: string
description: "The Calypso trade identifier."
- name: regulation
in: body
type: string
description: "The regulation: EMIR, DODD_FRANK, MIFID2."
steps:
- name: get-trade
type: call
call: "calypso.get-trade"
with:
trade_id: "{{trade_id}}"
- name: submit-report
type: call
call: "dtcc.submit-trade-report"
with:
trade_reference: "{{get-trade.external_reference}}"
regulation: "{{regulation}}"
product_type: "{{get-trade.product_type}}"
notional: "{{get-trade.notional}}"
currency: "{{get-trade.currency}}"
- name: log-audit
type: call
call: "servicenow.create-record"
with:
table: "u_trade_reporting_audit"
short_description: "{{regulation}} trade report: {{trade_id}}"
description: "Trade {{trade_id}} reported to DTCC under {{regulation}}. DTCC ref: {{submit-report.report_id}}. Product: {{get-trade.product_type}}. Notional: {{get-trade.notional}} {{get-trade.currency}}."
consumes:
- type: http
namespace: calypso
baseUri: "https://calypso.citi.com/calypsoserver/api/v1"
authentication:
type: bearer
token: "$secrets.calypso_token"
resources:
- name: trades
path: "/trades/{{trade_id}}"
inputParameters:
- name: trade_id
in: path
operations:
- name: get-trade
method: GET
- type: http
namespace: dtcc
baseUri: "https://api.dtcc.com/gtr/v1"
authentication:
type: bearer
token: "$secrets.dtcc_token"
resources:
- name: trade-reports
path: "/reports"
operations:
- name: submit-trade-report
method: POST
- type: http
namespace: servicenow
baseUri: "https://citi.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: table-records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Submits MiFID II trade reports by extracting transaction details from Calypso, enriching with LEI data, and submitting to the Approved Reporting Mechanism with compliance team notification.
naftiko: "0.5"
info:
label: "Trade Reporting MiFID Pipeline"
description: "Submits MiFID II trade reports by extracting transaction details from Calypso, enriching with LEI data, and submitting to the Approved Reporting Mechanism with compliance team notification."
tags:
- regulatory
- mifid
- calypso
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: reg-mifid
port: 8080
tools:
- name: submit-mifid-report
description: "Extract, enrich, and submit MiFID II trade report."
inputParameters:
- name: trade_id
in: body
type: string
description: "The Calypso trade identifier."
steps:
- name: get-trade
type: call
call: "calypso.get-trade"
with:
trade_id: "{{trade_id}}"
- name: enrich-lei
type: call
call: "gleif.get-lei"
with:
entity_name: "{{get-trade.counterparty_name}}"
- name: submit-report
type: call
call: "arm.submit-report"
with:
trade_id: "{{trade_id}}"
lei: "{{enrich-lei.lei}}"
instrument: "{{get-trade.instrument_id}}"
notional: "{{get-trade.notional}}"
- name: notify-compliance
type: call
call: "msteams.send-channel-message"
with:
team_id: "compliance"
channel_id: "mifid_reporting"
text: "MiFID report submitted for trade {{trade_id}}. Counterparty LEI: {{enrich-lei.lei}}. ARM ref: {{submit-report.report_id}}."
consumes:
- type: http
namespace: calypso
baseUri: "https://calypso.citi.com/api/v4"
authentication:
type: bearer
token: "$secrets.calypso_token"
resources:
- name: trades
path: "/trades/{{trade_id}}"
inputParameters:
- name: trade_id
in: path
operations:
- name: get-trade
method: GET
- type: http
namespace: gleif
baseUri: "https://api.gleif.org/api/v1"
authentication:
type: apiKey
name: X-API-Key
in: header
value: "$secrets.gleif_api_key"
resources:
- name: lei-records
path: "/lei-records"
operations:
- name: get-lei
method: GET
- type: http
namespace: arm
baseUri: "https://arm-reporting.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.arm_token"
resources:
- name: reports
path: "/reports"
operations:
- name: submit-report
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: send-channel-message
method: POST
Detects a failed settlement in DTCC, retrieves trade details from Calypso, opens a ServiceNow incident, and notifies the operations manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "Trade Settlement Failure Handler"
description: "Detects a failed settlement in DTCC, retrieves trade details from Calypso, opens a ServiceNow incident, and notifies the operations manager via Microsoft Teams."
tags:
- trading
- settlement
- dtcc
- calypso
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: settlement-ops
port: 8080
tools:
- name: handle-settlement-failure
description: "Process a DTCC settlement failure by retrieving trade details, opening a ServiceNow incident, and alerting operations."
inputParameters:
- name: settlement_ref
in: body
type: string
description: "The DTCC settlement instruction reference."
- name: ops_manager_email
in: body
type: string
description: "Operations manager email for Teams alert."
steps:
- name: get-settlement
type: call
call: "dtcc.get-settlement"
with:
settlement_ref: "{{settlement_ref}}"
- name: get-trade
type: call
call: "calypso.get-trade"
with:
trade_id: "{{get-settlement.trade_id}}"
- name: open-incident
type: call
call: "servicenow.create-record"
with:
table: "incident"
short_description: "Settlement failure: {{settlement_ref}} — {{get-trade.counterparty}}"
description: "DTCC ref {{settlement_ref}} failed. Trade {{get-settlement.trade_id}}, counterparty {{get-trade.counterparty}}, amount {{get-settlement.settlement_amount}} {{get-settlement.currency}}. Fail reason: {{get-settlement.fail_reason}}."
assigned_group: "Operations_Settlement"
priority: "2"
- name: notify-manager
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{ops_manager_email}}"
text: "Settlement failure alert: Ref {{settlement_ref}}, trade {{get-settlement.trade_id}}, {{get-settlement.settlement_amount}} {{get-settlement.currency}}. Reason: {{get-settlement.fail_reason}}. ServiceNow: {{open-incident.number}}."
consumes:
- type: http
namespace: dtcc
baseUri: "https://api.dtcc.com/settlement/v1"
authentication:
type: bearer
token: "$secrets.dtcc_token"
resources:
- name: settlements
path: "/instructions/{{settlement_ref}}"
inputParameters:
- name: settlement_ref
in: path
operations:
- name: get-settlement
method: GET
- type: http
namespace: calypso
baseUri: "https://calypso.citi.com/calypsoserver/api/v1"
authentication:
type: bearer
token: "$secrets.calypso_token"
resources:
- name: trades
path: "/trades/{{trade_id}}"
inputParameters:
- name: trade_id
in: path
operations:
- name: get-trade
method: GET
- type: http
namespace: servicenow
baseUri: "https://citi.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: table-records
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Escalates suspicious trading activity by retrieving the surveillance alert from Actimize, pulling trade details from Calypso, and creating a compliance investigation case in Pega.
naftiko: "0.5"
info:
label: "Trade Surveillance Escalation Pipeline"
description: "Escalates suspicious trading activity by retrieving the surveillance alert from Actimize, pulling trade details from Calypso, and creating a compliance investigation case in Pega."
tags:
- compliance
- surveillance
- actimize
- calypso
- pega
capability:
exposes:
- type: mcp
namespace: surveillance
port: 8080
tools:
- name: escalate-surveillance-alert
description: "Escalate a trade surveillance alert with full trade context and investigation case."
inputParameters:
- name: alert_id
in: body
type: string
description: "The Actimize surveillance alert ID."
steps:
- name: get-alert
type: call
call: "actimize.get-alert"
with:
alert_id: "{{alert_id}}"
- name: get-trades
type: call
call: "calypso.get-trade"
with:
trade_id: "{{get-alert.trade_id}}"
- name: create-investigation
type: call
call: "pega.create-case"
with:
case_type: "TradeSurveillance"
alert_id: "{{alert_id}}"
trade_id: "{{get-alert.trade_id}}"
alert_type: "{{get-alert.alert_type}}"
trader: "{{get-trades.trader_id}}"
notional: "{{get-trades.notional}}"
consumes:
- type: http
namespace: actimize
baseUri: "https://actimize.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.actimize_token"
resources:
- name: alerts
path: "/alerts/{{alert_id}}"
inputParameters:
- name: alert_id
in: path
operations:
- name: get-alert
method: GET
- type: http
namespace: calypso
baseUri: "https://calypso.citi.com/api/v4"
authentication:
type: bearer
token: "$secrets.calypso_token"
resources:
- name: trades
path: "/trades/{{trade_id}}"
inputParameters:
- name: trade_id
in: path
operations:
- name: get-trade
method: GET
- type: http
namespace: pega
baseUri: "https://pega.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.pega_token"
resources:
- name: cases
path: "/cases"
operations:
- name: create-case
method: POST
Fetches a transaction monitoring alert from Actimize NICE, enriches it with client data from Pegasystems CRM, and creates a SAR investigation case if the risk score exceeds threshold.
naftiko: "0.5"
info:
label: "Transaction Monitoring Alert Triage"
description: "Fetches a transaction monitoring alert from Actimize NICE, enriches it with client data from Pegasystems CRM, and creates a SAR investigation case if the risk score exceeds threshold."
tags:
- compliance
- aml
- actimize
- pega
- transaction-monitoring
capability:
exposes:
- type: mcp
namespace: compliance-tm
port: 8080
tools:
- name: triage-tm-alert
description: "Given an Actimize alert ID, fetch the alert, enrich with Pega CRM client data, and escalate to a SAR case if warranted."
inputParameters:
- name: alert_id
in: body
type: string
description: "The Actimize transaction monitoring alert ID."
- name: risk_threshold
in: body
type: number
description: "The risk score threshold for SAR escalation."
steps:
- name: get-alert
type: call
call: "actimize.get-alert"
with:
alert_id: "{{alert_id}}"
- name: get-client
type: call
call: "pega.get-client"
with:
client_id: "{{get-alert.client_id}}"
- name: create-sar-case
type: call
call: "actimize.create-sar-case"
with:
alert_id: "{{alert_id}}"
client_name: "{{get-client.full_name}}"
risk_score: "{{get-alert.risk_score}}"
narrative: "Alert {{alert_id}} for client {{get-client.full_name}} — risk score {{get-alert.risk_score}} exceeds threshold. Transaction amount: {{get-alert.transaction_amount}} {{get-alert.currency}}."
consumes:
- type: http
namespace: actimize
baseUri: "https://actimize.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.actimize_token"
resources:
- name: alerts
path: "/alerts/{{alert_id}}"
inputParameters:
- name: alert_id
in: path
operations:
- name: get-alert
method: GET
- name: sar-cases
path: "/sar-cases"
operations:
- name: create-sar-case
method: POST
- type: http
namespace: pega
baseUri: "https://pega.citi.com/prweb/api/v1"
authentication:
type: bearer
token: "$secrets.pega_token"
resources:
- name: clients
path: "/clients/{{client_id}}"
inputParameters:
- name: client_id
in: path
operations:
- name: get-client
method: GET
Fetches the current day cash position for a given currency and entity from the Kyriba treasury management system.
naftiko: "0.5"
info:
label: "Treasury Cash Position Retrieval"
description: "Fetches the current day cash position for a given currency and entity from the Kyriba treasury management system."
tags:
- treasury
- cash-management
- kyriba
capability:
exposes:
- type: mcp
namespace: treasury
port: 8080
tools:
- name: get-cash-position
description: "Retrieve the current cash position from Kyriba for a specific legal entity and currency."
inputParameters:
- name: entity_code
in: body
type: string
description: "The Citi legal entity code."
- name: currency
in: body
type: string
description: "The ISO 4217 currency code."
call: "kyriba.get-cash-position"
with:
entity_code: "{{entity_code}}"
currency: "{{currency}}"
consumes:
- type: http
namespace: kyriba
baseUri: "https://citi.kyriba.com/gateway/api/v1"
authentication:
type: bearer
token: "$secrets.kyriba_token"
resources:
- name: cash-positions
path: "/cash/balances?entityCode={{entity_code}}¤cy={{currency}}"
inputParameters:
- name: entity_code
in: query
- name: currency
in: query
operations:
- name: get-cash-position
method: GET
Processes vendor invoices by extracting data from SAP, matching against purchase orders, routing for approval in Pega, and sending confirmation via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Vendor Invoice Approval Pipeline"
description: "Processes vendor invoices by extracting data from SAP, matching against purchase orders, routing for approval in Pega, and sending confirmation via Microsoft Outlook."
tags:
- procurement
- sap
- pega
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: process-vendor-invoice
description: "Process a vendor invoice through SAP matching, Pega approval, and email confirmation."
inputParameters:
- name: invoice_number
in: body
type: string
description: "The vendor invoice number."
- name: vendor_id
in: body
type: string
description: "The SAP vendor identifier."
steps:
- name: get-invoice
type: call
call: "sap.get-invoice"
with:
invoice_number: "{{invoice_number}}"
vendor_id: "{{vendor_id}}"
- name: match-po
type: call
call: "sap.match-purchase-order"
with:
invoice_number: "{{invoice_number}}"
po_number: "{{get-invoice.po_number}}"
- name: route-approval
type: call
call: "pega.create-case"
with:
case_type: "InvoiceApproval"
invoice_number: "{{invoice_number}}"
amount: "{{get-invoice.amount}}"
match_status: "{{match-po.match_status}}"
- name: confirm-vendor
type: call
call: "outlook.send-mail"
with:
to: "{{get-invoice.vendor_email}}"
subject: "Invoice {{invoice_number}} Received"
body: "Your invoice {{invoice_number}} for {{get-invoice.amount}} {{get-invoice.currency}} has been received and is under review. Case: {{route-approval.case_id}}."
consumes:
- type: http
namespace: sap
baseUri: "https://sap.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: invoices
path: "/invoices/{{invoice_number}}"
inputParameters:
- name: invoice_number
in: path
operations:
- name: get-invoice
method: GET
- name: purchase-orders
path: "/purchase-orders/match"
operations:
- name: match-purchase-order
method: POST
- type: http
namespace: pega
baseUri: "https://pega.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.pega_token"
resources:
- name: cases
path: "/cases"
operations:
- name: create-case
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-mail
method: POST
Retrieves a wealth management client portfolio from Aladdin, pulls the client relationship details from Salesforce CRM, and sends a consolidated summary to the advisor via Microsoft Teams.
naftiko: "0.5"
info:
label: "Wealth Client Portfolio Summary"
description: "Retrieves a wealth management client portfolio from Aladdin, pulls the client relationship details from Salesforce CRM, and sends a consolidated summary to the advisor via Microsoft Teams."
tags:
- wealth-management
- portfolio
- aladdin
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: wealth-portfolio
port: 8080
tools:
- name: get-portfolio-summary
description: "Fetch a client portfolio from Aladdin, enrich with Salesforce CRM data, and deliver a summary to the advisor via Teams."
inputParameters:
- name: portfolio_id
in: body
type: string
description: "The Aladdin portfolio identifier."
- name: client_sf_id
in: body
type: string
description: "The Salesforce client account ID."
- name: advisor_email
in: body
type: string
description: "The wealth advisor email for Teams delivery."
steps:
- name: get-portfolio
type: call
call: "aladdin.get-portfolio"
with:
portfolio_id: "{{portfolio_id}}"
- name: get-client
type: call
call: "salesforce.get-account"
with:
account_id: "{{client_sf_id}}"
- name: notify-advisor
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{advisor_email}}"
text: "Portfolio summary for {{get-client.name}}: AUM {{get-portfolio.total_aum}} {{get-portfolio.currency}}. YTD return: {{get-portfolio.ytd_return}}%. Top holding: {{get-portfolio.top_holding}}."
consumes:
- type: http
namespace: aladdin
baseUri: "https://aladdin.blackrock.com/api/v1"
authentication:
type: bearer
token: "$secrets.aladdin_token"
resources:
- name: portfolios
path: "/portfolios/{{portfolio_id}}/summary"
inputParameters:
- name: portfolio_id
in: path
operations:
- name: get-portfolio
method: GET
- type: http
namespace: salesforce
baseUri: "https://citi.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: 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
Assembles a client review package by pulling portfolio data from Aladdin, CRM notes from Salesforce, and market commentary from Bloomberg, then uploads to SharePoint for the advisor.
naftiko: "0.5"
info:
label: "Wealth Client Review Preparation"
description: "Assembles a client review package by pulling portfolio data from Aladdin, CRM notes from Salesforce, and market commentary from Bloomberg, then uploads to SharePoint for the advisor."
tags:
- wealth-management
- aladdin
- salesforce
- bloomberg
- sharepoint
capability:
exposes:
- type: mcp
namespace: wealth-review
port: 8080
tools:
- name: prepare-client-review
description: "Assemble a wealth client review package from Aladdin portfolio data, Salesforce CRM notes, Bloomberg market commentary, and upload to SharePoint."
inputParameters:
- name: portfolio_id
in: body
type: string
description: "The Aladdin portfolio identifier."
- name: client_sf_id
in: body
type: string
description: "The Salesforce client account ID."
- name: advisor_site_id
in: body
type: string
description: "The SharePoint site ID for the advisor."
steps:
- name: get-portfolio
type: call
call: "aladdin.get-portfolio"
with:
portfolio_id: "{{portfolio_id}}"
- name: get-crm-notes
type: call
call: "salesforce.get-activity-history"
with:
account_id: "{{client_sf_id}}"
- name: get-market-commentary
type: call
call: "bloomberg.get-research"
with:
topic: "{{get-portfolio.primary_sector}}"
- name: upload-package
type: call
call: "sharepoint.upload-file"
with:
site_id: "{{advisor_site_id}}"
folder_path: "ClientReviews/{{get-portfolio.client_name}}"
file_name: "review_package.json"
consumes:
- type: http
namespace: aladdin
baseUri: "https://aladdin.blackrock.com/api/v1"
authentication:
type: bearer
token: "$secrets.aladdin_token"
resources:
- name: portfolios
path: "/portfolios/{{portfolio_id}}/summary"
inputParameters:
- name: portfolio_id
in: path
operations:
- name: get-portfolio
method: GET
- type: http
namespace: salesforce
baseUri: "https://citi.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: activity-history
path: "/sobjects/Account/{{account_id}}/ActivityHistories"
inputParameters:
- name: account_id
in: path
operations:
- name: get-activity-history
method: GET
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: research
path: "/research?topic={{topic}}"
inputParameters:
- name: topic
in: query
operations:
- name: get-research
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
- name: file_name
in: path
operations:
- name: upload-file
method: PUT
Runs a suitability assessment for a wealth management client by pulling the client profile from Salesforce, evaluating product fit via the suitability engine, and documenting results in OpenText.
naftiko: "0.5"
info:
label: "Wealth Suitability Assessment Pipeline"
description: "Runs a suitability assessment for a wealth management client by pulling the client profile from Salesforce, evaluating product fit via the suitability engine, and documenting results in OpenText."
tags:
- wealth-management
- salesforce
- compliance
- opentext
capability:
exposes:
- type: mcp
namespace: wealth-suitability
port: 8080
tools:
- name: assess-suitability
description: "Run product suitability assessment for a wealth client."
inputParameters:
- name: client_id
in: body
type: string
description: "The Salesforce client identifier."
- name: product_id
in: body
type: string
description: "The investment product identifier."
steps:
- name: get-client
type: call
call: "salesforce.get-account"
with:
account_id: "{{client_id}}"
- name: evaluate-suitability
type: call
call: "suitability-engine.evaluate"
with:
client_id: "{{client_id}}"
product_id: "{{product_id}}"
risk_profile: "{{get-client.Risk_Profile__c}}"
net_worth: "{{get-client.Net_Worth__c}}"
- name: store-assessment
type: call
call: "opentext.upload-document"
with:
folder: "/suitability/{{client_id}}"
content: "{{evaluate-suitability.assessment_report}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://citi.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: suitability-engine
baseUri: "https://suitability.citi.com/api/v1"
authentication:
type: bearer
token: "$secrets.suitability_token"
resources:
- name: evaluations
path: "/evaluate"
operations:
- name: evaluate
method: POST
- type: http
namespace: opentext
baseUri: "https://opentext.citi.com/api/v2"
authentication:
type: bearer
token: "$secrets.opentext_token"
resources:
- name: documents
path: "/documents"
operations:
- name: upload-document
method: POST
Screens a wire transfer for fraud by scoring it via the ML fraud model, checking the beneficiary against sanctions lists in Refinitiv World-Check, and routing flagged transactions to the fraud team via ServiceNow.
naftiko: "0.5"
info:
label: "Wire Transfer Fraud Detection Pipeline"
description: "Screens a wire transfer for fraud by scoring it via the ML fraud model, checking the beneficiary against sanctions lists in Refinitiv World-Check, and routing flagged transactions to the fraud team via ServiceNow."
tags:
- fraud
- payments
- refinitiv
- servicenow
- machine-learning
capability:
exposes:
- type: mcp
namespace: fraud-detection
port: 8080
tools:
- name: screen-wire-transfer
description: "Screen a wire transfer for fraud using ML scoring, sanctions check, and case creation."
inputParameters:
- name: payment_ref
in: body
type: string
description: "The wire transfer payment reference."
- name: beneficiary_name
in: body
type: string
description: "The beneficiary name."
- name: amount
in: body
type: number
description: "The transfer amount."
steps:
- name: score-transaction
type: call
call: "fraud-ml.score-transaction"
with:
payment_ref: "{{payment_ref}}"
amount: "{{amount}}"
beneficiary_name: "{{beneficiary_name}}"
- name: screen-beneficiary
type: call
call: "refinitiv.screen-entity"
with:
entity_name: "{{beneficiary_name}}"
- name: create-case
type: call
call: "servicenow.create-incident"
with:
short_description: "Fraud alert: Wire {{payment_ref}}"
description: "Fraud score: {{score-transaction.fraud_score}}. Sanctions hit: {{screen-beneficiary.match_found}}. Amount: {{amount}}."
urgency: "1"
consumes:
- type: http
namespace: fraud-ml
baseUri: "https://ml.citi.com/fraud/v1"
authentication:
type: bearer
token: "$secrets.fraud_ml_token"
resources:
- name: scoring
path: "/score"
operations:
- name: score-transaction
method: POST
- type: http
namespace: refinitiv
baseUri: "https://api.refinitiv.com/worldcheck/v2"
authentication:
type: bearer
token: "$secrets.refinitiv_wc_token"
resources:
- name: screening
path: "/screening"
operations:
- name: screen-entity
method: POST
- type: http
namespace: servicenow
baseUri: "https://citi.service-now.com/api/now/table"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/incident"
operations:
- name: create-incident
method: POST
Retrieves employee compensation details from Workday including base salary, bonus structure, and equity grants.
naftiko: "0.5"
info:
label: "Workday Compensation Lookup"
description: "Retrieves employee compensation details from Workday including base salary, bonus structure, and equity grants."
tags:
- hr
- workday
capability:
exposes:
- type: mcp
namespace: hr-workday
port: 8080
tools:
- name: get-compensation
description: "Fetch employee compensation details from Workday."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee identifier."
call: "workday.get-compensation"
with:
employee_id: "{{employee_id}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5-impl.workday.com/ccx/api/v1/citi"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: compensation
path: "/workers/{{employee_id}}/compensation"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-compensation
method: GET
Retrieves employee profile information from Workday HCM by worker ID, returning name, department, cost center, and reporting chain.
naftiko: "0.5"
info:
label: "Workday Employee Lookup"
description: "Retrieves employee profile information from Workday HCM by worker ID, returning name, department, cost center, and reporting chain."
tags:
- hr
- workday
- employee
capability:
exposes:
- type: mcp
namespace: hr-workday
port: 8080
tools:
- name: get-employee
description: "Fetch employee details from Workday by worker ID."
inputParameters:
- name: worker_id
in: body
type: string
description: "The Workday worker ID."
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET