Fidelity Investments Capabilities
Naftiko 0.5 capability definitions for Fidelity Investments - 100 capabilities showing integration workflows and service orchestrations.
When a new hire completes onboarding in Workday, creates their 401k enrollment record in Salesforce, sends plan documents via Microsoft Outlook, and tracks enrollment status in ServiceNow.
naftiko: "0.5"
info:
label: "401k Plan Enrollment Workflow"
description: "When a new hire completes onboarding in Workday, creates their 401k enrollment record in Salesforce, sends plan documents via Microsoft Outlook, and tracks enrollment status in ServiceNow."
tags:
- retirement
- onboarding
- workday
- salesforce
- microsoft-outlook
- servicenow
capability:
exposes:
- type: mcp
namespace: retirement-enrollment
port: 8080
tools:
- name: enroll-401k
description: "Orchestrate 401k enrollment for a new hire across HR, CRM, email, and tracking systems."
inputParameters:
- name: worker_id
in: body
type: string
description: "Workday worker ID."
- name: contribution_pct
in: body
type: number
description: "Default contribution percentage."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
- name: create-enrollment
type: call
call: "salesforce.create-enrollment"
with:
employee_name: "{{get-employee.full_name}}"
employee_email: "{{get-employee.work_email}}"
contribution_pct: "{{contribution_pct}}"
plan_type: "401k"
- name: send-documents
type: call
call: "outlook.send-email"
with:
to: "{{get-employee.work_email}}"
subject: "Your Fidelity 401(k) Enrollment Confirmation"
body: "Welcome {{get-employee.first_name}}, your 401(k) enrollment is confirmed at {{contribution_pct}}% contribution. Enrollment ID: {{create-enrollment.enrollment_id}}. Review your plan details at NetBenefits."
- name: create-tracking-ticket
type: call
call: "servicenow.create-record"
with:
table: "u_retirement_enrollment"
short_description: "401k enrollment: {{get-employee.full_name}}"
enrollment_id: "{{create-enrollment.enrollment_id}}"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/fidelity"
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: salesforce
baseUri: "https://fidelity.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: enrollments
path: "/sobjects/Enrollment__c"
operations:
- name: create-enrollment
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: send-mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
- type: http
namespace: servicenow
baseUri: "https://fidelity.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tables
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Reviews access at Fidelity via Okta, IAM, and Jira.
naftiko: "0.5"
info:
label: "Access Review Pipeline"
description: "Reviews access at Fidelity via Okta, IAM, and Jira."
tags:
- security
- access-management
- okta
- compliance
capability:
exposes:
- type: mcp
namespace: access-rev
port: 8080
tools:
- name: review
description: "Review access at Fidelity."
inputParameters:
- name: dept
in: body
type: string
description: "Department."
steps:
- name: ent
type: call
call: "okta.get-users"
with:
dept: "{{dept}}"
- name: compare
type: call
call: "iam.compare"
with:
data: "{{ent.data}}"
- name: flag
type: call
call: "iam.flag"
with:
violations: "{{compare.violations}}"
- name: fix
type: call
call: "jira.create-issue"
with:
project: "IAM"
summary: "Violations in {{dept}}"
consumes:
- type: http
namespace: okta
baseUri: "https://fidelity.com.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users"
operations:
- name: get-users
method: GET
- type: http
namespace: iam
baseUri: "https://iam.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.iam_token"
resources:
- name: reviews
path: "/compare"
operations:
- name: compare
method: POST
- type: http
namespace: jira
baseUri: "https://fidelity.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Pulls payroll summary data from ADP for a given pay period and loads it into Snowflake for compensation analytics.
naftiko: "0.5"
info:
label: "ADP Payroll Data Sync"
description: "Pulls payroll summary data from ADP for a given pay period and loads it into Snowflake for compensation analytics."
tags:
- hr
- payroll
- adp
- snowflake
capability:
exposes:
- type: mcp
namespace: payroll-sync
port: 8080
tools:
- name: sync-payroll-data
description: "Extract payroll data from ADP and load into Snowflake for analytics."
inputParameters:
- name: pay_period_end
in: body
type: string
description: "Pay period end date in YYYY-MM-DD format."
steps:
- name: extract-payroll
type: call
call: "adp.get-payroll-summary"
with:
pay_period_end: "{{pay_period_end}}"
- name: load-to-snowflake
type: call
call: "snowflake.execute-query"
with:
statement: "CALL load_payroll_data('{{pay_period_end}}', '{{extract-payroll.output_path}}')"
consumes:
- type: http
namespace: adp
baseUri: "https://api.adp.com/hr/v2"
authentication:
type: bearer
token: "$secrets.adp_token"
resources:
- name: payroll
path: "/payroll-summaries?payPeriodEndDate={{pay_period_end}}"
inputParameters:
- name: pay_period_end
in: query
operations:
- name: get-payroll-summary
method: GET
- type: http
namespace: snowflake
baseUri: "https://fidelity.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Fetches advisor AUM and revenue data from Salesforce, pulls benchmark returns from FactSet, combines them in Snowflake, and triggers a Power BI refresh for the advisor scorecard.
naftiko: "0.5"
info:
label: "Advisor Performance Dashboard Update"
description: "Fetches advisor AUM and revenue data from Salesforce, pulls benchmark returns from FactSet, combines them in Snowflake, and triggers a Power BI refresh for the advisor scorecard."
tags:
- wealth-management
- reporting
- salesforce
- factset
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: advisor-dashboard
port: 8080
tools:
- name: update-advisor-scorecard
description: "Refresh advisor performance data from CRM, benchmarks, and analytics for the Power BI scorecard."
inputParameters:
- name: advisor_id
in: body
type: string
description: "Salesforce advisor user ID."
- name: reporting_period
in: body
type: string
description: "Reporting period (e.g., 2026-Q1)."
steps:
- name: get-advisor-metrics
type: call
call: "salesforce.query-advisor-metrics"
with:
advisor_id: "{{advisor_id}}"
period: "{{reporting_period}}"
- name: get-benchmarks
type: call
call: "factset.get-benchmark-returns"
with:
benchmark: "SP500"
period: "{{reporting_period}}"
- name: load-combined-data
type: call
call: "snowflake.execute-query"
with:
statement: "CALL update_advisor_scorecard('{{advisor_id}}', '{{reporting_period}}', '{{get-advisor-metrics.total_aum}}', '{{get-benchmarks.return_pct}}')"
- name: refresh-dashboard
type: call
call: "powerbi.trigger-refresh"
with:
workspace_id: "advisor-scorecards-ws"
dataset_id: "advisor-performance-ds"
consumes:
- type: http
namespace: salesforce
baseUri: "https://fidelity.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: advisor-query
path: "/query/?q=SELECT+SUM(AUM__c),COUNT(Id)+FROM+Account+WHERE+OwnerId='{{advisor_id}}'"
inputParameters:
- name: advisor_id
in: query
operations:
- name: query-advisor-metrics
method: GET
- type: http
namespace: factset
baseUri: "https://api.factset.com/portfolio/v1"
authentication:
type: basic
username: "$secrets.factset_user"
password: "$secrets.factset_password"
resources:
- name: benchmarks
path: "/benchmarks/{{benchmark}}/returns?period={{period}}"
inputParameters:
- name: benchmark
in: path
- name: period
in: query
operations:
- name: get-benchmark-returns
method: GET
- type: http
namespace: snowflake
baseUri: "https://fidelity.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: powerbi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: workspace_id
in: path
- name: dataset_id
in: path
operations:
- name: trigger-refresh
method: POST
Publishes a trade event message to an Apache Kafka topic for downstream consumers such as risk engines and settlement systems.
naftiko: "0.5"
info:
label: "Apache Kafka Trade Event Publisher"
description: "Publishes a trade event message to an Apache Kafka topic for downstream consumers such as risk engines and settlement systems."
tags:
- trading
- messaging
- apache-kafka
capability:
exposes:
- type: mcp
namespace: trade-events
port: 8080
tools:
- name: publish-trade-event
description: "Publish a trade execution event to a Kafka topic."
inputParameters:
- name: topic
in: body
type: string
description: "Kafka topic name."
- name: trade_id
in: body
type: string
description: "Unique trade identifier."
- name: payload
in: body
type: string
description: "JSON trade event payload."
call: "kafka.publish-event"
with:
topic: "{{topic}}"
key: "{{trade_id}}"
value: "{{payload}}"
consumes:
- type: http
namespace: kafka
baseUri: "https://kafka-rest.fidelity.com/v3"
authentication:
type: bearer
token: "$secrets.kafka_rest_token"
resources:
- name: records
path: "/clusters/fidelity-prod/topics/{{topic}}/records"
inputParameters:
- name: topic
in: path
operations:
- name: publish-event
method: POST
Manages API deprecation at Fidelity via consumer identification, notices, and tracking.
naftiko: "0.5"
info:
label: "API Deprecation Pipeline"
description: "Manages API deprecation at Fidelity via consumer identification, notices, and tracking."
tags:
- api-management
- communications
- governance
capability:
exposes:
- type: mcp
namespace: api-sunset
port: 8080
tools:
- name: notify-sunset
description: "Manage API sunset at Fidelity."
inputParameters:
- name: api
in: body
type: string
description: "API name."
- name: date
in: body
type: string
description: "Sunset date."
steps:
- name: consumers
type: call
call: "api-gw.consumers"
with:
api: "{{api}}"
- name: notify
type: call
call: "email.batch"
with:
to: "{{consumers.emails}}"
subject: "{{api}} sunset: {{date}}"
- name: track
type: call
call: "analytics.usage"
with:
api: "{{api}}"
- name: ticket
type: call
call: "jira.create-issue"
with:
project: "API"
summary: "Sunset {{api}} by {{date}}"
consumes:
- type: http
namespace: api-gw
baseUri: "https://api-gw.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.api_gw_token"
resources:
- name: consumers
path: "/apis/{{api}}/consumers"
inputParameters:
- name: api
in: path
operations:
- name: consumers
method: GET
- type: http
namespace: email
baseUri: "https://email.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: batch
path: "/send-batch"
operations:
- name: batch
method: POST
- type: http
namespace: analytics
baseUri: "https://analytics.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: usage
path: "/api-usage"
operations:
- name: usage
method: GET
- type: http
namespace: jira
baseUri: "https://fidelity.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Invokes an AWS Lambda function for serverless trade processing tasks such as margin calculation or fee computation.
naftiko: "0.5"
info:
label: "AWS Lambda Function Invocation"
description: "Invokes an AWS Lambda function for serverless trade processing tasks such as margin calculation or fee computation."
tags:
- operations
- serverless
- aws-lambda
capability:
exposes:
- type: mcp
namespace: serverless-compute
port: 8080
tools:
- name: invoke-lambda
description: "Invoke an AWS Lambda function with a JSON payload."
inputParameters:
- name: function_name
in: body
type: string
description: "Lambda function name or ARN."
- name: payload
in: body
type: string
description: "JSON payload for the function."
call: "lambda.invoke-function"
with:
function_name: "{{function_name}}"
payload: "{{payload}}"
consumes:
- type: http
namespace: lambda
baseUri: "https://lambda.us-east-1.amazonaws.com/2015-03-31"
authentication:
type: aws-sigv4
key: "$secrets.aws_access_key"
resources:
- name: functions
path: "/functions/{{function_name}}/invocations"
inputParameters:
- name: function_name
in: path
operations:
- name: invoke-function
method: POST
Archives a compliance document to Amazon S3 with appropriate retention tagging and encryption.
naftiko: "0.5"
info:
label: "AWS S3 Document Archive"
description: "Archives a compliance document to Amazon S3 with appropriate retention tagging and encryption."
tags:
- compliance
- storage
- amazon-s3
capability:
exposes:
- type: mcp
namespace: document-archive
port: 8080
tools:
- name: archive-document
description: "Upload a document to S3 with compliance retention tags."
inputParameters:
- name: bucket
in: body
type: string
description: "S3 bucket name."
- name: key
in: body
type: string
description: "S3 object key path."
- name: retention_years
in: body
type: integer
description: "Retention period in years."
call: "s3.put-object"
with:
bucket: "{{bucket}}"
key: "{{key}}"
retention_years: "{{retention_years}}"
consumes:
- type: http
namespace: s3
baseUri: "https://s3.us-east-1.amazonaws.com"
authentication:
type: aws-sigv4
key: "$secrets.aws_access_key"
resources:
- name: objects
path: "/{{bucket}}/{{key}}"
inputParameters:
- name: bucket
in: path
- name: key
in: path
operations:
- name: put-object
method: PUT
Triggers an Azure Data Factory pipeline for ETL processing of financial data and sends a Microsoft Teams notification with the run status to the data engineering team.
naftiko: "0.5"
info:
label: "Azure Data Factory ETL with Notification"
description: "Triggers an Azure Data Factory pipeline for ETL processing of financial data and sends a Microsoft Teams notification with the run status to the data engineering team."
tags:
- data-engineering
- azure-data-factory
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: etl-pipelines
port: 8080
tools:
- name: trigger-adf-pipeline-with-notify
description: "Trigger an ADF pipeline and notify the team via Microsoft Teams."
inputParameters:
- name: pipeline_name
in: body
type: string
description: "ADF pipeline name."
- name: parameters
in: body
type: string
description: "JSON string of pipeline parameters."
- name: notify_email
in: body
type: string
description: "Team member email for notification."
steps:
- name: trigger-pipeline
type: call
call: "adf.create-pipeline-run"
with:
pipeline_name: "{{pipeline_name}}"
parameters: "{{parameters}}"
- name: notify-team
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{notify_email}}"
text: "ADF pipeline {{pipeline_name}} triggered. Run ID: {{trigger-pipeline.run_id}}. Status: {{trigger-pipeline.status}}"
consumes:
- type: http
namespace: adf
baseUri: "https://management.azure.com/subscriptions/$secrets.azure_subscription_id/resourceGroups/fidelity-data-rg/providers/Microsoft.DataFactory/factories/fidelity-adf"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: pipelines
path: "/pipelines/{{pipeline_name}}/createRun?api-version=2018-06-01"
inputParameters:
- name: pipeline_name
in: path
operations:
- name: create-pipeline-run
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chat-messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Submits a Spark job to Azure Databricks for large-scale portfolio risk calculations, returning the run ID and cluster information.
naftiko: "0.5"
info:
label: "Azure Databricks Spark Job Runner"
description: "Submits a Spark job to Azure Databricks for large-scale portfolio risk calculations, returning the run ID and cluster information."
tags:
- data-engineering
- risk-management
- azure-databricks
capability:
exposes:
- type: mcp
namespace: spark-compute
port: 8080
tools:
- name: submit-risk-calc-job
description: "Submit a Spark job to Azure Databricks for portfolio risk calculation."
inputParameters:
- name: notebook_path
in: body
type: string
description: "Databricks notebook path."
- name: parameters
in: body
type: string
description: "JSON parameters for the notebook."
call: "databricks.submit-run"
with:
notebook_path: "{{notebook_path}}"
parameters: "{{parameters}}"
consumes:
- type: http
namespace: databricks
baseUri: "https://adb-fidelity.azuredatabricks.net/api/2.1"
authentication:
type: bearer
token: "$secrets.databricks_token"
resources:
- name: jobs
path: "/jobs/runs/submit"
operations:
- name: submit-run
method: POST
Checks build at Fidelity.
naftiko: "0.5"
info:
label: "Azure DevOps Build Check"
description: "Checks build at Fidelity."
tags:
- devops
- azure-devops
- ci-cd
capability:
exposes:
- type: mcp
namespace: azdo-build
port: 8080
tools:
- name: check-build
description: "Check build at Fidelity."
inputParameters:
- name: project
in: body
type: string
description: "Project."
- name: build_id
in: body
type: string
description: "Build ID."
call: "azdo.get-build"
with:
project: "{{project}}"
build_id: "{{build_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: azdo
baseUri: "https://dev.azure.com/fidelity.com"
authentication:
type: bearer
token: "$secrets.azdo_token"
resources:
- name: builds
path: "/{{project}}/_apis/build/builds/{{build_id}}"
inputParameters:
- name: project
in: path
- name: build_id
in: path
operations:
- name: get-build
method: GET
Verifies backups at Fidelity.
naftiko: "0.5"
info:
label: "Backup Verification Pipeline"
description: "Verifies backups at Fidelity."
tags:
- database
- backup
- operations
capability:
exposes:
- type: mcp
namespace: backup-verify
port: 8080
tools:
- name: verify-backups
description: "Verify backups at Fidelity."
inputParameters:
- name: db
in: body
type: string
description: "Database."
- name: date
in: body
type: string
description: "Backup date."
steps:
- name: status
type: call
call: "backup.get-status"
with:
db: "{{db}}"
date: "{{date}}"
- name: verify
type: call
call: "backup.verify"
with:
id: "{{status.backup_id}}"
- name: log
type: call
call: "snowflake.query"
with:
query: "INSERT INTO backup_log VALUES ('{{db}}','{{date}}','{{verify.status}}')"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#dba"
text: "Backup {{db}}: {{verify.status}}"
consumes:
- type: http
namespace: backup
baseUri: "https://backup.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.backup_token"
resources:
- name: backups
path: "/databases/{{db}}/status"
inputParameters:
- name: db
in: path
operations:
- name: get-status
method: GET
- type: http
namespace: snowflake
baseUri: "https://fidelity.com.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Executes a Bloomberg Query Language expression to retrieve risk metrics such as VaR, beta, and Sharpe ratio for a given portfolio.
naftiko: "0.5"
info:
label: "Bloomberg BQL Risk Metrics"
description: "Executes a Bloomberg Query Language expression to retrieve risk metrics such as VaR, beta, and Sharpe ratio for a given portfolio."
tags:
- risk-management
- analytics
- bloomberg-query-language
capability:
exposes:
- type: mcp
namespace: risk-analytics
port: 8080
tools:
- name: run-bql-risk-query
description: "Execute a BQL query against Bloomberg for portfolio risk metrics."
inputParameters:
- name: bql_expression
in: body
type: string
description: "A valid Bloomberg BQL expression."
call: "bql.execute-query"
with:
expression: "{{bql_expression}}"
consumes:
- type: http
namespace: bql
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg"
authentication:
type: bearer
token: "$secrets.bloomberg_api_token"
resources:
- name: bql-queries
path: "/queries"
operations:
- name: execute-query
method: POST
Pulls real-time market data for a given security from Bloomberg Enterprise Data, returning price, volume, and change metrics.
naftiko: "0.5"
info:
label: "Bloomberg Market Data Fetch"
description: "Pulls real-time market data for a given security from Bloomberg Enterprise Data, returning price, volume, and change metrics."
tags:
- trading
- market-data
- bloomberg-enterprise-data
capability:
exposes:
- type: mcp
namespace: market-data
port: 8080
tools:
- name: get-security-quote
description: "Fetch real-time quote data for a security ticker from Bloomberg Enterprise Data."
inputParameters:
- name: ticker
in: body
type: string
description: "Bloomberg ticker symbol (e.g., AAPL US Equity)."
call: "bloomberg.get-quote"
with:
ticker: "{{ticker}}"
consumes:
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
authentication:
type: bearer
token: "$secrets.bloomberg_api_token"
resources:
- name: quotes
path: "/quotes/{{ticker}}"
inputParameters:
- name: ticker
in: path
operations:
- name: get-quote
method: GET
Analyzes budget variance at Fidelity via Oracle, Workday, and Slack.
naftiko: "0.5"
info:
label: "Budget Variance Pipeline"
description: "Analyzes budget variance at Fidelity via Oracle, Workday, and Slack."
tags:
- finance
- budget
- oracle
- workday
capability:
exposes:
- type: mcp
namespace: budget-var
port: 8080
tools:
- name: analyze-variance
description: "Check budget variance at Fidelity."
inputParameters:
- name: cc
in: body
type: string
description: "Cost center."
- name: period
in: body
type: string
description: "Period."
steps:
- name: actuals
type: call
call: "oracle.get-actuals"
with:
cc: "{{cc}}"
period: "{{period}}"
- name: budget
type: call
call: "workday.get-budget"
with:
cc: "{{cc}}"
- name: compute
type: call
call: "analytics.variance"
with:
a: "{{actuals.total}}"
b: "{{budget.total}}"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#finance"
text: "Variance {{cc}}: ${{compute.variance}}"
consumes:
- type: http
namespace: oracle
baseUri: "https://oracle.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: fin
path: "/actuals"
operations:
- name: get-actuals
method: GET
- type: http
namespace: workday
baseUri: "https://wd5.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: budgets
path: "/budgets"
operations:
- name: get-budget
method: GET
- type: http
namespace: analytics
baseUri: "https://analytics.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: var
path: "/compute"
operations:
- name: variance
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Plans capacity at Fidelity by collecting utilization and forecasting.
naftiko: "0.5"
info:
label: "Capacity Planning Pipeline"
description: "Plans capacity at Fidelity by collecting utilization and forecasting."
tags:
- infrastructure
- capacity-planning
- forecasting
capability:
exposes:
- type: mcp
namespace: capacity
port: 8080
tools:
- name: plan-capacity
description: "Plan capacity at Fidelity."
inputParameters:
- name: resource
in: body
type: string
description: "Resource type."
- name: months
in: body
type: number
description: "Forecast months."
steps:
- name: util
type: call
call: "monitoring.get-util"
with:
resource: "{{resource}}"
- name: forecast
type: call
call: "analytics.forecast"
with:
current: "{{util.pct}}"
months: "{{months}}"
- name: procure
type: call
call: "servicenow.create-request"
with:
type: "capacity"
resource: "{{resource}}"
- name: dashboard
type: call
call: "power-bi.refresh"
with:
dataset: "capacity"
consumes:
- type: http
namespace: monitoring
baseUri: "https://monitoring.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.monitoring_token"
resources:
- name: util
path: "/resources/{{resource}}/util"
inputParameters:
- name: resource
in: path
operations:
- name: get-util
method: GET
- type: http
namespace: analytics
baseUri: "https://analytics.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: forecast
path: "/demand"
operations:
- name: forecast
method: POST
- type: http
namespace: servicenow
baseUri: "https://fidelity.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset}}/refreshes"
inputParameters:
- name: dataset
in: path
operations:
- name: refresh
method: POST
Monitors cert expiry at Fidelity.
naftiko: "0.5"
info:
label: "Certificate Expiry Pipeline"
description: "Monitors cert expiry at Fidelity."
tags:
- security
- certificates
- monitoring
capability:
exposes:
- type: mcp
namespace: cert-monitor
port: 8080
tools:
- name: check-certs
description: "Monitor certs at Fidelity."
inputParameters:
- name: domains
in: body
type: string
description: "Domains to check."
steps:
- name: scan
type: call
call: "cert-scanner.scan"
with:
domains: "{{domains}}"
- name: filter
type: call
call: "analytics.filter-expiring"
with:
certs: "{{scan.results}}"
- name: ticket
type: call
call: "jira.create-issue"
with:
project: "SEC"
summary: "{{filter.count}} certs expiring"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#security"
text: "Cert alert: {{filter.count}} expiring"
consumes:
- type: http
namespace: cert-scanner
baseUri: "https://certs.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.cert_token"
resources:
- name: scans
path: "/scan"
operations:
- name: scan
method: POST
- type: http
namespace: jira
baseUri: "https://fidelity.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Routes changes at Fidelity through ServiceNow and CAB approval.
naftiko: "0.5"
info:
label: "Change Management Pipeline"
description: "Routes changes at Fidelity through ServiceNow and CAB approval."
tags:
- change-management
- servicenow
- itil
capability:
exposes:
- type: mcp
namespace: change-mgmt
port: 8080
tools:
- name: process-change
description: "Process changes at Fidelity."
inputParameters:
- name: change_id
in: body
type: string
description: "Change ID."
- name: date
in: body
type: string
description: "Date."
steps:
- name: get
type: call
call: "servicenow.get-change"
with:
id: "{{change_id}}"
- name: conflicts
type: call
call: "servicenow.check-conflicts"
with:
date: "{{date}}"
- name: submit
type: call
call: "servicenow.update"
with:
id: "{{change_id}}"
state: "approval"
- name: notify
type: call
call: "email.send"
with:
to: "cab@co.com"
subject: "CAB: {{change_id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://fidelity.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: changes
path: "/table/change_request/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-change
method: GET
- type: http
namespace: email
baseUri: "https://email.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
Retrieves a Salesforce client account record by account number, returning contact details, account type, and assigned advisor.
naftiko: "0.5"
info:
label: "Client Account Lookup"
description: "Retrieves a Salesforce client account record by account number, returning contact details, account type, and assigned advisor."
tags:
- wealth-management
- client-services
- salesforce
capability:
exposes:
- type: mcp
namespace: client-lookup
port: 8080
tools:
- name: get-client-account
description: "Look up a client account in Salesforce by account number. Returns contact info, account type, AUM, and assigned advisor."
inputParameters:
- name: account_number
in: body
type: string
description: "The Fidelity client account number."
call: "salesforce.get-account"
with:
account_number: "{{account_number}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://fidelity.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/query/?q=SELECT+Id,Name,AccountNumber,Type,OwnerId+FROM+Account+WHERE+AccountNumber='{{account_number}}'"
inputParameters:
- name: account_number
in: query
operations:
- name: get-account
method: GET
Assembles a client meeting brief by pulling account data from Salesforce, portfolio performance from FactSet, recent interactions from Gong, and compiles the document in SharePoint.
naftiko: "0.5"
info:
label: "Client Meeting Prep Assembler"
description: "Assembles a client meeting brief by pulling account data from Salesforce, portfolio performance from FactSet, recent interactions from Gong, and compiles the document in SharePoint."
tags:
- wealth-management
- client-services
- salesforce
- factset
- gong
- sharepoint
capability:
exposes:
- type: mcp
namespace: meeting-prep
port: 8080
tools:
- name: prepare-client-brief
description: "Compile a comprehensive client meeting brief from CRM, portfolio, and interaction data."
inputParameters:
- name: account_id
in: body
type: string
description: "Salesforce account ID."
- name: advisor_email
in: body
type: string
description: "Advisor email for document access."
steps:
- name: get-account-data
type: call
call: "salesforce.get-account-detail"
with:
account_id: "{{account_id}}"
- name: get-performance
type: call
call: "factset.get-portfolio-performance"
with:
portfolio_id: "{{get-account-data.portfolio_id}}"
- name: get-interactions
type: call
call: "gong.get-recent-calls"
with:
account_name: "{{get-account-data.Name}}"
- name: save-brief
type: call
call: "sharepoint.upload-file"
with:
site_id: "advisor-workspace"
file_path: "MeetingBriefs/{{get-account-data.Name}}/brief_{{get-account-data.next_meeting_date}}.docx"
content: "{\"account\": \"{{get-account-data}}\", \"performance\": \"{{get-performance}}\", \"interactions\": \"{{get-interactions}}\"}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://fidelity.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account-detail
method: GET
- type: http
namespace: factset
baseUri: "https://api.factset.com/portfolio/v1"
authentication:
type: basic
username: "$secrets.factset_user"
password: "$secrets.factset_password"
resources:
- name: performance
path: "/portfolios/{{portfolio_id}}/performance"
inputParameters:
- name: portfolio_id
in: path
operations:
- name: get-portfolio-performance
method: GET
- type: http
namespace: gong
baseUri: "https://api.gong.io/v2"
authentication:
type: bearer
token: "$secrets.gong_token"
resources:
- name: calls
path: "/calls?filter.accountName={{account_name}}&filter.fromDateTime=-30d"
inputParameters:
- name: account_name
in: query
operations:
- name: get-recent-calls
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:/{{file_path}}:/content"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: upload-file
method: PUT
Retrieves client survey responses from Salesforce, scores risk tolerance using a Snowflake model, updates the client profile in Salesforce, and archives the assessment in Box.
naftiko: "0.5"
info:
label: "Client Risk Profile Assessment"
description: "Retrieves client survey responses from Salesforce, scores risk tolerance using a Snowflake model, updates the client profile in Salesforce, and archives the assessment in Box."
tags:
- wealth-management
- risk-management
- salesforce
- snowflake
- box
capability:
exposes:
- type: mcp
namespace: risk-profiling
port: 8080
tools:
- name: assess-risk-profile
description: "Score a client risk profile from survey data and update their CRM record."
inputParameters:
- name: client_account_id
in: body
type: string
description: "Salesforce client account ID."
steps:
- name: get-survey
type: call
call: "salesforce.get-survey-responses"
with:
account_id: "{{client_account_id}}"
- name: score-risk
type: call
call: "snowflake.run-risk-model"
with:
statement: "SELECT score_risk_tolerance('{{get-survey.responses_json}}') as risk_score, classify_risk_tolerance('{{get-survey.responses_json}}') as risk_category"
- name: update-profile
type: call
call: "salesforce.update-account"
with:
account_id: "{{client_account_id}}"
risk_score: "{{score-risk.risk_score}}"
risk_category: "{{score-risk.risk_category}}"
- name: archive-assessment
type: call
call: "box.upload-file"
with:
parent_id: "risk_assessments"
name: "risk_assessment_{{client_account_id}}_{{score-risk.assessment_date}}.json"
content: "{{score-risk}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://fidelity.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: survey-responses
path: "/query/?q=SELECT+Response_Data__c+FROM+Survey_Response__c+WHERE+Account__c='{{account_id}}'+ORDER+BY+CreatedDate+DESC+LIMIT+1"
inputParameters:
- name: account_id
in: query
operations:
- name: get-survey-responses
method: GET
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: update-account
method: PATCH
- type: http
namespace: snowflake
baseUri: "https://fidelity.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-risk-model
method: POST
- type: http
namespace: box
baseUri: "https://api.box.com/2.0"
authentication:
type: bearer
token: "$secrets.box_token"
resources:
- name: files
path: "/files/content"
operations:
- name: upload-file
method: POST
Optimizes cloud costs at Fidelity via Azure, FinOps, Jira, and Power BI.
naftiko: "0.5"
info:
label: "Cloud Cost Optimization Pipeline"
description: "Optimizes cloud costs at Fidelity via Azure, FinOps, Jira, and Power BI."
tags:
- cloud
- cost-management
- finops
capability:
exposes:
- type: mcp
namespace: cloud-opt
port: 8080
tools:
- name: optimize
description: "Optimize cloud costs at Fidelity."
inputParameters:
- name: provider
in: body
type: string
description: "Provider."
- name: range
in: body
type: string
description: "Range."
steps:
- name: spend
type: call
call: "cloud.get-costs"
with:
provider: "{{provider}}"
range: "{{range}}"
- name: savings
type: call
call: "finops.analyze"
with:
data: "{{spend.data}}"
- name: action
type: call
call: "jira.create-issue"
with:
project: "FINOPS"
summary: "Save ${{savings.potential}}"
- name: report
type: call
call: "power-bi.refresh"
with:
dataset: "cloud"
consumes:
- type: http
namespace: cloud
baseUri: "https://management.azure.com"
authentication:
type: bearer
token: "$secrets.azure_token"
resources:
- name: costs
path: "/providers/Microsoft.CostManagement/query"
operations:
- name: get-costs
method: POST
- type: http
namespace: finops
baseUri: "https://finops.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.finops_token"
resources:
- name: analysis
path: "/savings"
operations:
- name: analyze
method: POST
- type: http
namespace: jira
baseUri: "https://fidelity.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset}}/refreshes"
inputParameters:
- name: dataset
in: path
operations:
- name: refresh
method: POST
When a compliance violation is detected in Snowflake surveillance data, creates a Salesforce compliance case, uploads evidence to Box, notifies the compliance officer via Microsoft Teams, and logs in ServiceNow.
naftiko: "0.5"
info:
label: "Compliance Alert Escalation Pipeline"
description: "When a compliance violation is detected in Snowflake surveillance data, creates a Salesforce compliance case, uploads evidence to Box, notifies the compliance officer via Microsoft Teams, and logs in ServiceNow."
tags:
- compliance
- surveillance
- snowflake
- salesforce
- box
- microsoft-teams
- servicenow
capability:
exposes:
- type: mcp
namespace: compliance-escalation
port: 8080
tools:
- name: escalate-violation
description: "Escalate a compliance violation with case creation, evidence storage, notification, and audit logging."
inputParameters:
- name: violation_id
in: body
type: string
description: "Snowflake violation record ID."
- name: compliance_officer_email
in: body
type: string
description: "Compliance officer email address."
steps:
- name: get-violation
type: call
call: "snowflake.get-violation"
with:
statement: "SELECT * FROM compliance.violations WHERE violation_id = '{{violation_id}}'"
- name: create-case
type: call
call: "salesforce.create-case"
with:
subject: "Compliance Violation: {{get-violation.violation_type}} - {{get-violation.account_number}}"
type: "Compliance"
priority: "High"
description: "{{get-violation.description}}"
- name: store-evidence
type: call
call: "box.upload-file"
with:
parent_id: "compliance_evidence"
name: "violation_{{violation_id}}_evidence.json"
content: "{{get-violation.evidence_payload}}"
- name: notify-officer
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{compliance_officer_email}}"
text: "COMPLIANCE ALERT: {{get-violation.violation_type}} detected for account {{get-violation.account_number}}. Case: {{create-case.CaseNumber}}. Evidence: {{store-evidence.shared_link}}"
- name: log-incident
type: call
call: "servicenow.create-record"
with:
table: "u_compliance_incident"
short_description: "Compliance violation {{violation_id}}"
case_number: "{{create-case.CaseNumber}}"
severity: "{{get-violation.severity}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://fidelity.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: get-violation
method: POST
- type: http
namespace: salesforce
baseUri: "https://fidelity.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
- type: http
namespace: box
baseUri: "https://api.box.com/2.0"
authentication:
type: bearer
token: "$secrets.box_token"
resources:
- name: files
path: "/files/content"
operations:
- name: upload-file
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chat-messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
- type: http
namespace: servicenow
baseUri: "https://fidelity.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tables
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
When a compliance training deadline approaches, queries Pluralsight for completion status, updates Workday learning records, and sends reminder emails via Microsoft Outlook to incomplete employees.
naftiko: "0.5"
info:
label: "Compliance Training Enrollment Tracker"
description: "When a compliance training deadline approaches, queries Pluralsight for completion status, updates Workday learning records, and sends reminder emails via Microsoft Outlook to incomplete employees."
tags:
- compliance
- training
- pluralsight
- workday
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: compliance-training
port: 8080
tools:
- name: track-compliance-training
description: "Track compliance training completion across learning platform and HR system with email reminders."
inputParameters:
- name: course_id
in: body
type: string
description: "Pluralsight course ID."
- name: deadline
in: body
type: string
description: "Training deadline in YYYY-MM-DD format."
- name: department
in: body
type: string
description: "Department to check."
steps:
- name: get-completions
type: call
call: "pluralsight.get-course-completions"
with:
course_id: "{{course_id}}"
- name: get-department-staff
type: call
call: "workday.get-department-workers"
with:
department: "{{department}}"
- name: update-records
type: call
call: "workday.update-learning-records"
with:
completions: "{{get-completions.users}}"
course_id: "{{course_id}}"
- name: send-reminders
type: call
call: "outlook.send-email"
with:
to: "{{get-department-staff.incomplete_emails}}"
subject: "Compliance Training Reminder - Due {{deadline}}"
body: "You have not yet completed the required compliance training. Please complete the course by {{deadline}} to remain in compliance. Access the course at Pluralsight."
consumes:
- type: http
namespace: pluralsight
baseUri: "https://api.pluralsight.com/v1"
authentication:
type: bearer
token: "$secrets.pluralsight_token"
resources:
- name: courses
path: "/courses/{{course_id}}/completions"
inputParameters:
- name: course_id
in: path
operations:
- name: get-course-completions
method: GET
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/fidelity"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: departments
path: "/workers?department={{department}}"
inputParameters:
- name: department
in: query
operations:
- name: get-department-workers
method: GET
- name: learning
path: "/learning/records"
operations:
- name: update-learning-records
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: send-mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Searches Confluence at Fidelity.
naftiko: "0.5"
info:
label: "Confluence Article Search"
description: "Searches Confluence at Fidelity."
tags:
- knowledge-management
- confluence
- documentation
capability:
exposes:
- type: mcp
namespace: confluence-search
port: 8080
tools:
- name: search-articles
description: "Search Confluence at Fidelity."
inputParameters:
- name: query
in: body
type: string
description: "Query."
call: "confluence.search"
with:
query: "{{query}}"
outputParameters:
- name: title
type: string
mapping: "$.results[0].title"
consumes:
- type: http
namespace: confluence
baseUri: "https://fidelity.com.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: content
path: "/content/search"
operations:
- name: search
method: GET
Tracks contract renewals at Fidelity via contracts system, email, Jira, and Salesforce.
naftiko: "0.5"
info:
label: "Contract Renewal Pipeline"
description: "Tracks contract renewals at Fidelity via contracts system, email, Jira, and Salesforce."
tags:
- procurement
- contracts
- salesforce
- jira
capability:
exposes:
- type: mcp
namespace: contract-renew
port: 8080
tools:
- name: track
description: "Track renewals at Fidelity."
inputParameters:
- name: contract_id
in: body
type: string
description: "Contract ID."
- name: owner
in: body
type: string
description: "Owner email."
steps:
- name: get
type: call
call: "contracts.get"
with:
id: "{{contract_id}}"
- name: remind
type: call
call: "email.send"
with:
to: "{{owner}}"
subject: "Renewal: {{contract_id}}"
- name: task
type: call
call: "jira.create-issue"
with:
project: "PROC"
summary: "Renew {{contract_id}}"
- name: crm
type: call
call: "salesforce.update"
with:
id: "{{contract_id}}"
stage: "Renewal"
consumes:
- type: http
namespace: contracts
baseUri: "https://contracts.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.contracts_token"
resources:
- name: contracts
path: "/contracts/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get
method: GET
- type: http
namespace: email
baseUri: "https://email.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
- type: http
namespace: jira
baseUri: "https://fidelity.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: salesforce
baseUri: "https://fidelity.com.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opps
path: "/sobjects/Opportunity"
operations:
- name: update
method: PATCH
Detects corporate actions from Bloomberg Enterprise Data, updates positions in SimCorp Dimension, notifies portfolio managers via Microsoft Teams, and logs the action in Snowflake for audit.
naftiko: "0.5"
info:
label: "Corporate Action Processing Pipeline"
description: "Detects corporate actions from Bloomberg Enterprise Data, updates positions in SimCorp Dimension, notifies portfolio managers via Microsoft Teams, and logs the action in Snowflake for audit."
tags:
- operations
- corporate-actions
- bloomberg-enterprise-data
- simcorp-dimension
- microsoft-teams
- snowflake
capability:
exposes:
- type: mcp
namespace: corporate-actions
port: 8080
tools:
- name: process-corporate-action
description: "Process a corporate action across position management, notification, and audit systems."
inputParameters:
- name: action_id
in: body
type: string
description: "Bloomberg corporate action ID."
- name: pm_channel
in: body
type: string
description: "Microsoft Teams channel for PM notifications."
steps:
- name: get-action
type: call
call: "bloomberg.get-corporate-action"
with:
action_id: "{{action_id}}"
- name: update-positions
type: call
call: "simcorp.apply-corporate-action"
with:
action_type: "{{get-action.type}}"
security_id: "{{get-action.security_id}}"
effective_date: "{{get-action.effective_date}}"
ratio: "{{get-action.ratio}}"
- name: notify-pms
type: call
call: "msteams.post-channel"
with:
channel_id: "{{pm_channel}}"
text: "Corporate Action: {{get-action.type}} on {{get-action.security_name}} effective {{get-action.effective_date}}. Ratio: {{get-action.ratio}}. Positions updated: {{update-positions.affected_count}}"
- name: log-audit
type: call
call: "snowflake.execute-query"
with:
statement: "INSERT INTO corporate_actions_log (action_id, type, security_id, effective_date, positions_affected) VALUES ('{{action_id}}', '{{get-action.type}}', '{{get-action.security_id}}', '{{get-action.effective_date}}', {{update-positions.affected_count}})"
consumes:
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
authentication:
type: bearer
token: "$secrets.bloomberg_api_token"
resources:
- name: corporate-actions
path: "/corporate-actions/{{action_id}}"
inputParameters:
- name: action_id
in: path
operations:
- name: get-corporate-action
method: GET
- type: http
namespace: simcorp
baseUri: "https://simcorp.fidelity.com/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: corporate-actions
path: "/corporate-actions/apply"
operations:
- name: apply-corporate-action
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
- type: http
namespace: snowflake
baseUri: "https://fidelity.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Reallocates costs at Fidelity.
naftiko: "0.5"
info:
label: "Cost Reallocation Pipeline"
description: "Reallocates costs at Fidelity."
tags:
- finance
- cost-allocation
- oracle
capability:
exposes:
- type: mcp
namespace: cost-realloc
port: 8080
tools:
- name: reallocate
description: "Reallocate costs at Fidelity."
inputParameters:
- name: source
in: body
type: string
description: "Source CC."
- name: target
in: body
type: string
description: "Target CC."
- name: amount
in: body
type: number
description: "Amount."
steps:
- name: current
type: call
call: "oracle.get-alloc"
with:
cc: "{{source}}"
- name: compute
type: call
call: "analytics.realloc"
with:
source: "{{source}}"
target: "{{target}}"
amount: "{{amount}}"
- name: post
type: call
call: "oracle.post-journal"
with:
entries: "{{compute.entries}}"
- name: notify
type: call
call: "slack.post-message"
with:
channel: "#finance"
text: "Reallocated ${{amount}} from {{source}} to {{target}}"
consumes:
- type: http
namespace: oracle
baseUri: "https://oracle.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: allocations
path: "/cost-centers/{{cc}}/allocations"
inputParameters:
- name: cc
in: path
operations:
- name: get-alloc
method: GET
- type: http
namespace: analytics
baseUri: "https://analytics.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: realloc
path: "/compute"
operations:
- name: realloc
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Monitors data pipelines at Fidelity via Databricks, Snowflake, Slack, and ServiceNow.
naftiko: "0.5"
info:
label: "Data Pipeline Monitor Pipeline"
description: "Monitors data pipelines at Fidelity via Databricks, Snowflake, Slack, and ServiceNow."
tags:
- data-engineering
- databricks
- monitoring
- slack
capability:
exposes:
- type: mcp
namespace: pipeline-mon
port: 8080
tools:
- name: monitor
description: "Monitor pipelines at Fidelity."
inputParameters:
- name: pipeline_id
in: body
type: string
description: "Pipeline ID."
steps:
- name: status
type: call
call: "databricks.get-run"
with:
id: "{{pipeline_id}}"
- name: quality
type: call
call: "snowflake.query"
with:
query: "SELECT COUNT(*) FROM out WHERE p='{{pipeline_id}}'"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#data"
text: "Pipeline {{pipeline_id}}: {{status.state}}"
- name: incident
type: call
call: "servicenow.create-incident"
with:
desc: "Pipeline {{pipeline_id}} issue"
consumes:
- type: http
namespace: databricks
baseUri: "https://fidelity.com.cloud.databricks.com/api/2.1"
authentication:
type: bearer
token: "$secrets.databricks_token"
resources:
- name: jobs
path: "/jobs/runs/get"
operations:
- name: get-run
method: GET
- type: http
namespace: snowflake
baseUri: "https://fidelity.com.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: servicenow
baseUri: "https://fidelity.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Checks Datadog monitor at Fidelity.
naftiko: "0.5"
info:
label: "Datadog Monitor Check"
description: "Checks Datadog monitor at Fidelity."
tags:
- monitoring
- datadog
- observability
capability:
exposes:
- type: mcp
namespace: dd-monitor
port: 8080
tools:
- name: check-monitor
description: "Check monitor at Fidelity."
inputParameters:
- name: monitor_id
in: body
type: string
description: "Monitor ID."
call: "datadog.get-monitor"
with:
monitor_id: "{{monitor_id}}"
outputParameters:
- name: status
type: string
mapping: "$.overall_state"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
Tests disaster recovery at Fidelity via failover, health checks, and reporting.
naftiko: "0.5"
info:
label: "DR Test Pipeline"
description: "Tests disaster recovery at Fidelity via failover, health checks, and reporting."
tags:
- disaster-recovery
- business-continuity
- testing
capability:
exposes:
- type: mcp
namespace: dr-test
port: 8080
tools:
- name: test-dr
description: "Test DR at Fidelity."
inputParameters:
- name: plan_id
in: body
type: string
description: "Plan ID."
- name: type
in: body
type: string
description: "Test type."
steps:
- name: failover
type: call
call: "dr.failover"
with:
plan: "{{plan_id}}"
type: "{{type}}"
- name: validate
type: call
call: "monitoring.check"
with:
scope: "critical"
- name: measure
type: call
call: "dr.metrics"
with:
id: "{{failover.id}}"
- name: report
type: call
call: "confluence.create-page"
with:
title: "DR - {{plan_id}}"
body: "RTO:{{measure.rto}}m RPO:{{measure.rpo}}m"
consumes:
- type: http
namespace: dr
baseUri: "https://dr.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.dr_token"
resources:
- name: failovers
path: "/failovers"
operations:
- name: failover
method: POST
- type: http
namespace: monitoring
baseUri: "https://monitoring.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.monitoring_token"
resources:
- name: health
path: "/checks"
operations:
- name: check
method: POST
- type: http
namespace: confluence
baseUri: "https://fidelity.com.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Detects infrastructure drift at Fidelity via Terraform, Slack, and Jira.
naftiko: "0.5"
info:
label: "Drift Detection Pipeline"
description: "Detects infrastructure drift at Fidelity via Terraform, Slack, and Jira."
tags:
- infrastructure
- terraform
- drift-detection
- devops
capability:
exposes:
- type: mcp
namespace: drift-det
port: 8080
tools:
- name: detect
description: "Detect drift at Fidelity."
inputParameters:
- name: ws_id
in: body
type: string
description: "Workspace ID."
- name: env
in: body
type: string
description: "Environment."
steps:
- name: plan
type: call
call: "terraform.run"
with:
ws: "{{ws_id}}"
- name: check
type: call
call: "terraform.get-plan"
with:
run: "{{plan.id}}"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#infra"
text: "Drift {{env}}: {{check.changes}} changes"
- name: ticket
type: call
call: "jira.create-issue"
with:
project: "INFRA"
summary: "Drift in {{env}}"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/runs"
operations:
- name: run
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: jira
baseUri: "https://fidelity.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Checks ES index at Fidelity.
naftiko: "0.5"
info:
label: "ES Index Health"
description: "Checks ES index at Fidelity."
tags:
- search
- elasticsearch
- infrastructure
capability:
exposes:
- type: mcp
namespace: es-health
port: 8080
tools:
- name: check-index
description: "Check ES index at Fidelity."
inputParameters:
- name: index
in: body
type: string
description: "Index name."
call: "es.get-health"
with:
index: "{{index}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: docs
type: number
mapping: "$.docs.count"
consumes:
- type: http
namespace: es
baseUri: "https://es.fidelity.com:9200"
authentication:
type: bearer
token: "$secrets.es_token"
resources:
- name: indices
path: "/{{index}}/_stats"
inputParameters:
- name: index
in: path
operations:
- name: get-health
method: GET
Searches Elasticsearch for trade execution logs matching a given order ID or time range, used for trade support investigations.
naftiko: "0.5"
info:
label: "Elasticsearch Trade Log Search"
description: "Searches Elasticsearch for trade execution logs matching a given order ID or time range, used for trade support investigations."
tags:
- operations
- trade-support
- elasticsearch
capability:
exposes:
- type: mcp
namespace: trade-log-search
port: 8080
tools:
- name: search-trade-logs
description: "Search Elasticsearch for trade execution logs by order ID."
inputParameters:
- name: order_id
in: body
type: string
description: "Trade order identifier."
call: "elasticsearch.search-logs"
with:
order_id: "{{order_id}}"
consumes:
- type: http
namespace: elasticsearch
baseUri: "https://elasticsearch.fidelity.com:9200"
authentication:
type: basic
username: "$secrets.elastic_user"
password: "$secrets.elastic_password"
resources:
- name: trade-logs
path: "/trade-logs-*/_search"
operations:
- name: search-logs
method: POST
When a termination is processed in Workday, disables the Azure AD account, revokes Salesforce access, closes ServiceNow tickets, and notifies HR via Microsoft Teams.
naftiko: "0.5"
info:
label: "Employee Offboarding Orchestrator"
description: "When a termination is processed in Workday, disables the Azure AD account, revokes Salesforce access, closes ServiceNow tickets, and notifies HR via Microsoft Teams."
tags:
- hr
- offboarding
- workday
- azure-active-directory
- salesforce
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: offboard-employee
description: "Orchestrate the full offboarding workflow across identity, CRM, ITSM, and communications."
inputParameters:
- name: worker_id
in: body
type: string
description: "Workday worker ID of the departing employee."
- name: hr_contact_email
in: body
type: string
description: "HR partner email for notifications."
steps:
- name: get-employee
type: call
call: "workday.get-worker"
with:
worker_id: "{{worker_id}}"
- name: disable-ad-account
type: call
call: "azuread.disable-user"
with:
user_principal_name: "{{get-employee.work_email}}"
- name: deactivate-salesforce
type: call
call: "salesforce.deactivate-user"
with:
email: "{{get-employee.work_email}}"
- name: close-tickets
type: call
call: "servicenow.bulk-close"
with:
assigned_to: "{{get-employee.work_email}}"
close_notes: "Employee {{get-employee.full_name}} offboarded. Tickets reassigned or closed."
- name: notify-hr
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{hr_contact_email}}"
text: "Offboarding complete for {{get-employee.full_name}}. AD disabled, Salesforce deactivated, {{close-tickets.count}} tickets closed."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/fidelity"
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: azuread
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: users
path: "/users/{{user_principal_name}}"
inputParameters:
- name: user_principal_name
in: path
operations:
- name: disable-user
method: PATCH
- type: http
namespace: salesforce
baseUri: "https://fidelity.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: users
path: "/query/?q=SELECT+Id+FROM+User+WHERE+Email='{{email}}'"
inputParameters:
- name: email
in: query
operations:
- name: deactivate-user
method: GET
- type: http
namespace: servicenow
baseUri: "https://fidelity.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident?sysparm_query=assigned_to={{assigned_to}}^state!=7"
inputParameters:
- name: assigned_to
in: query
operations:
- name: bulk-close
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chat-messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Offboards employees at Fidelity via Okta, Slack, ServiceNow, and storage.
naftiko: "0.5"
info:
label: "Employee Offboarding Pipeline"
description: "Offboards employees at Fidelity via Okta, Slack, ServiceNow, and storage."
tags:
- hr
- offboarding
- okta
- servicenow
capability:
exposes:
- type: mcp
namespace: offboarding
port: 8080
tools:
- name: offboard
description: "Offboard employees at Fidelity."
inputParameters:
- name: emp_id
in: body
type: string
description: "Employee ID."
- name: last_day
in: body
type: string
description: "Last day."
steps:
- name: disable
type: call
call: "okta.deactivate"
with:
user: "{{emp_id}}"
- name: revoke
type: call
call: "slack.remove"
with:
user: "{{emp_id}}"
- name: return
type: call
call: "servicenow.create-request"
with:
type: "return"
emp: "{{emp_id}}"
- name: archive
type: call
call: "storage.archive"
with:
user: "{{emp_id}}"
consumes:
- type: http
namespace: okta
baseUri: "https://fidelity.com.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users/{{user}}/lifecycle/deactivate"
inputParameters:
- name: user
in: path
operations:
- name: deactivate
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: users
path: "/users.admin.remove"
operations:
- name: remove
method: POST
- type: http
namespace: servicenow
baseUri: "https://fidelity.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: storage
baseUri: "https://storage.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.storage_token"
resources:
- name: archives
path: "/archive"
operations:
- name: archive
method: POST
Runs end-of-day reconciliation by comparing positions in SimCorp Dimension with custodian records in Snowflake, generating break reports in SharePoint, creating Jira tickets for unresolved breaks, and sending a summary to operations via Microsoft Teams.
naftiko: "0.5"
info:
label: "End-of-Day Reconciliation Orchestrator"
description: "Runs end-of-day reconciliation by comparing positions in SimCorp Dimension with custodian records in Snowflake, generating break reports in SharePoint, creating Jira tickets for unresolved breaks, and sending a summary to operations via Microsoft Teams."
tags:
- operations
- reconciliation
- simcorp-dimension
- snowflake
- sharepoint
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: eod-recon
port: 8080
tools:
- name: run-eod-reconciliation
description: "Execute end-of-day position reconciliation with break reporting and escalation."
inputParameters:
- name: business_date
in: body
type: string
description: "Business date in YYYY-MM-DD format."
- name: ops_channel
in: body
type: string
description: "Microsoft Teams operations channel ID."
steps:
- name: get-internal-positions
type: call
call: "simcorp.get-eod-positions"
with:
date: "{{business_date}}"
- name: run-recon-query
type: call
call: "snowflake.execute-query"
with:
statement: "CALL run_eod_position_recon('{{business_date}}')"
- name: store-break-report
type: call
call: "sharepoint.upload-file"
with:
site_id: "operations"
file_path: "Reconciliation/EOD/{{business_date}}_break_report.json"
content: "{{run-recon-query.break_details}}"
- name: create-break-tickets
type: call
call: "jira.create-issue"
with:
project: "OPSRECON"
summary: "EOD Position Breaks: {{business_date}} - {{run-recon-query.break_count}} items"
description: "Break report: {{store-break-report.url}}. Total breaks: {{run-recon-query.break_count}}. Net break value: ${{run-recon-query.net_break_value}}"
issue_type: "Task"
priority: "High"
- name: notify-ops-team
type: call
call: "msteams.post-channel"
with:
channel_id: "{{ops_channel}}"
text: "EOD Recon Complete ({{business_date}}): {{run-recon-query.matched_count}} matched, {{run-recon-query.break_count}} breaks. Report: {{store-break-report.url}}. Jira: {{create-break-tickets.key}}"
consumes:
- type: http
namespace: simcorp
baseUri: "https://simcorp.fidelity.com/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: positions
path: "/positions/eod?date={{date}}"
inputParameters:
- name: date
in: query
operations:
- name: get-eod-positions
method: GET
- type: http
namespace: snowflake
baseUri: "https://fidelity.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: jira
baseUri: "https://fidelity.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Audits expenses at Fidelity via Concur, compliance checks, and email.
naftiko: "0.5"
info:
label: "Expense Audit Pipeline"
description: "Audits expenses at Fidelity via Concur, compliance checks, and email."
tags:
- finance
- travel
- sap-concur
- compliance
capability:
exposes:
- type: mcp
namespace: expense-audit
port: 8080
tools:
- name: audit
description: "Audit expenses at Fidelity."
inputParameters:
- name: report_id
in: body
type: string
description: "Report ID."
steps:
- name: get
type: call
call: "concur.get-report"
with:
id: "{{report_id}}"
- name: check
type: call
call: "compliance.check"
with:
expenses: "{{get.entries}}"
- name: flag
type: call
call: "workflow.flag"
with:
id: "{{report_id}}"
violations: "{{check.violations}}"
- name: notify
type: call
call: "email.send"
with:
to: "{{get.approver}}"
subject: "Expense {{report_id}} violations"
consumes:
- type: http
namespace: concur
baseUri: "https://us.api.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: reports
path: "/expense/reports/{{id}}"
inputParameters:
- name: id
in: path
operations:
- name: get-report
method: GET
- type: http
namespace: compliance
baseUri: "https://compliance.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.compliance_token"
resources:
- name: policies
path: "/check"
operations:
- name: check
method: POST
- type: http
namespace: workflow
baseUri: "https://workflow.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.workflow_token"
resources:
- name: reviews
path: "/flag"
operations:
- name: flag
method: POST
- type: http
namespace: email
baseUri: "https://email.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
Queries FactSet for current holdings of a portfolio, returning security identifiers, weights, and market values.
naftiko: "0.5"
info:
label: "FactSet Holdings Snapshot"
description: "Queries FactSet for current holdings of a portfolio, returning security identifiers, weights, and market values."
tags:
- portfolio-management
- analytics
- factset
capability:
exposes:
- type: mcp
namespace: portfolio-analytics
port: 8080
tools:
- name: get-portfolio-holdings
description: "Retrieve current holdings for a portfolio from FactSet by portfolio ID."
inputParameters:
- name: portfolio_id
in: body
type: string
description: "The FactSet portfolio identifier."
call: "factset.get-holdings"
with:
portfolio_id: "{{portfolio_id}}"
consumes:
- type: http
namespace: factset
baseUri: "https://api.factset.com/portfolio/v1"
authentication:
type: basic
username: "$secrets.factset_user"
password: "$secrets.factset_password"
resources:
- name: holdings
path: "/portfolios/{{portfolio_id}}/holdings"
inputParameters:
- name: portfolio_id
in: path
operations:
- name: get-holdings
method: GET
Analyzes feedback at Fidelity via surveys, AI sentiment, and Power BI.
naftiko: "0.5"
info:
label: "Customer Feedback Pipeline"
description: "Analyzes feedback at Fidelity via surveys, AI sentiment, and Power BI."
tags:
- customer-experience
- analytics
- sentiment-analysis
capability:
exposes:
- type: mcp
namespace: feedback
port: 8080
tools:
- name: analyze
description: "Analyze feedback at Fidelity."
inputParameters:
- name: survey_id
in: body
type: string
description: "Survey ID."
steps:
- name: collect
type: call
call: "survey.get"
with:
id: "{{survey_id}}"
- name: sentiment
type: call
call: "ai.analyze"
with:
text: "{{collect.responses}}"
- name: themes
type: call
call: "ai.themes"
with:
data: "{{collect.responses}}"
- name: dashboard
type: call
call: "power-bi.refresh"
with:
dataset: "cx"
consumes:
- type: http
namespace: survey
baseUri: "https://surveys.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.survey_token"
resources:
- name: responses
path: "/surveys/{{id}}/responses"
inputParameters:
- name: id
in: path
operations:
- name: get
method: GET
- type: http
namespace: ai
baseUri: "https://api.openai.com/v1"
authentication:
type: bearer
token: "$secrets.openai_api_key"
resources:
- name: completions
path: "/chat/completions"
operations:
- name: analyze
method: POST
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset}}/refreshes"
inputParameters:
- name: dataset
in: path
operations:
- name: refresh
method: POST
Checks GitHub repo at Fidelity.
naftiko: "0.5"
info:
label: "GitHub Repo Check"
description: "Checks GitHub repo at Fidelity."
tags:
- devops
- github
- version-control
capability:
exposes:
- type: mcp
namespace: gh-repo
port: 8080
tools:
- name: get-branch
description: "Check branch at Fidelity."
inputParameters:
- name: repo
in: body
type: string
description: "Repo."
- name: branch
in: body
type: string
description: "Branch."
call: "github.get-branch"
with:
repo: "{{repo}}"
branch: "{{branch}}"
outputParameters:
- name: sha
type: string
mapping: "$.commit.sha"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: branches
path: "/repos/org/{{repo}}/branches/{{branch}}"
inputParameters:
- name: repo
in: path
- name: branch
in: path
operations:
- name: get-branch
method: GET
Checks Grafana dashboard at Fidelity.
naftiko: "0.5"
info:
label: "Grafana Dashboard Status"
description: "Checks Grafana dashboard at Fidelity."
tags:
- monitoring
- grafana
- dashboards
capability:
exposes:
- type: mcp
namespace: grafana
port: 8080
tools:
- name: check-dash
description: "Check dashboard at Fidelity."
inputParameters:
- name: uid
in: body
type: string
description: "Dashboard UID."
call: "grafana.get-dash"
with:
uid: "{{uid}}"
outputParameters:
- name: title
type: string
mapping: "$.dashboard.title"
consumes:
- type: http
namespace: grafana
baseUri: "https://grafana.fidelity.com/api"
authentication:
type: bearer
token: "$secrets.grafana_token"
resources:
- name: dashboards
path: "/dashboards/uid/{{uid}}"
inputParameters:
- name: uid
in: path
operations:
- name: get-dash
method: GET
When a new lead is created in HubSpot, enriches with ZoomInfo firmographic data, scores the lead in Snowflake, and creates a Salesforce opportunity if qualified.
naftiko: "0.5"
info:
label: "HubSpot Lead Qualification Pipeline"
description: "When a new lead is created in HubSpot, enriches with ZoomInfo firmographic data, scores the lead in Snowflake, and creates a Salesforce opportunity if qualified."
tags:
- sales
- marketing
- hubspot
- zoominfo
- snowflake
- salesforce
capability:
exposes:
- type: mcp
namespace: lead-qualification
port: 8080
tools:
- name: qualify-lead
description: "Enrich, score, and qualify a new lead from HubSpot to Salesforce."
inputParameters:
- name: hubspot_contact_id
in: body
type: string
description: "HubSpot contact ID."
steps:
- name: get-lead
type: call
call: "hubspot.get-contact"
with:
contact_id: "{{hubspot_contact_id}}"
- name: enrich-firmographics
type: call
call: "zoominfo.get-company"
with:
company_name: "{{get-lead.company}}"
- name: score-lead
type: call
call: "snowflake.execute-query"
with:
statement: "SELECT score_institutional_lead('{{get-lead.company}}', '{{enrich-firmographics.revenue}}', '{{enrich-firmographics.employee_count}}', '{{enrich-firmographics.industry}}') as lead_score"
- name: create-opportunity
type: call
call: "salesforce.create-opportunity"
with:
name: "{{get-lead.company}} - Institutional Services"
contact_email: "{{get-lead.email}}"
lead_score: "{{score-lead.lead_score}}"
company_revenue: "{{enrich-firmographics.revenue}}"
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/objects/contacts/{{contact_id}}"
inputParameters:
- name: contact_id
in: path
operations:
- name: get-contact
method: GET
- type: http
namespace: zoominfo
baseUri: "https://api.zoominfo.com/search"
authentication:
type: bearer
token: "$secrets.zoominfo_token"
resources:
- name: companies
path: "/company"
operations:
- name: get-company
method: POST
- type: http
namespace: snowflake
baseUri: "https://fidelity.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: salesforce
baseUri: "https://fidelity.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
operations:
- name: create-opportunity
method: POST
Checks IBM MQ queue depth and message age for trade messaging queues, returning current depth, oldest message age, and consumer count.
naftiko: "0.5"
info:
label: "IBM MQ Message Queue Monitor"
description: "Checks IBM MQ queue depth and message age for trade messaging queues, returning current depth, oldest message age, and consumer count."
tags:
- operations
- messaging
- ibm-mq
capability:
exposes:
- type: mcp
namespace: mq-monitoring
port: 8080
tools:
- name: check-queue-health
description: "Get IBM MQ queue depth and health metrics for a trade messaging queue."
inputParameters:
- name: queue_manager
in: body
type: string
description: "Queue manager name."
- name: queue_name
in: body
type: string
description: "Queue name."
call: "ibmmq.get-queue-status"
with:
queue_manager: "{{queue_manager}}"
queue_name: "{{queue_name}}"
consumes:
- type: http
namespace: ibmmq
baseUri: "https://ibmmq.fidelity.com/ibmmq/rest/v2"
authentication:
type: basic
username: "$secrets.ibmmq_user"
password: "$secrets.ibmmq_password"
resources:
- name: queues
path: "/messaging/qmgr/{{queue_manager}}/queue/{{queue_name}}"
inputParameters:
- name: queue_manager
in: path
- name: queue_name
in: path
operations:
- name: get-queue-status
method: GET
Pulls AWS cost data via CloudWatch, Azure spend from Azure Synapse Analytics, combines in Snowflake, and generates a Tableau dashboard refresh for FinOps review.
naftiko: "0.5"
info:
label: "Infrastructure Cost Optimization Report"
description: "Pulls AWS cost data via CloudWatch, Azure spend from Azure Synapse Analytics, combines in Snowflake, and generates a Tableau dashboard refresh for FinOps review."
tags:
- finops
- infrastructure
- cloudwatch
- azure-synapse-analytics
- snowflake
- tableau
capability:
exposes:
- type: mcp
namespace: finops-reporting
port: 8080
tools:
- name: generate-cost-report
description: "Aggregate multi-cloud cost data and refresh the FinOps dashboard."
inputParameters:
- name: month
in: body
type: string
description: "Reporting month in YYYY-MM format."
steps:
- name: get-aws-costs
type: call
call: "cloudwatch.get-metric-data"
with:
namespace: "AWS/Billing"
metric: "EstimatedCharges"
period: "{{month}}"
- name: get-azure-costs
type: call
call: "synapse.execute-query"
with:
query: "SELECT service_name, SUM(cost) as total_cost FROM azure_billing WHERE billing_month = '{{month}}' GROUP BY service_name"
- name: load-combined
type: call
call: "snowflake.execute-query"
with:
statement: "CALL merge_cloud_costs('{{month}}', '{{get-aws-costs.datapoints}}', '{{get-azure-costs.results}}')"
- name: refresh-tableau
type: call
call: "tableau.refresh-extract"
with:
datasource_id: "cloud-cost-analysis"
consumes:
- type: http
namespace: cloudwatch
baseUri: "https://monitoring.us-east-1.amazonaws.com"
authentication:
type: aws-sigv4
key: "$secrets.aws_access_key"
resources:
- name: metric-data
path: "/"
operations:
- name: get-metric-data
method: POST
- type: http
namespace: synapse
baseUri: "https://fidelity-synapse.sql.azuresynapse.net"
authentication:
type: bearer
token: "$secrets.synapse_token"
resources:
- name: queries
path: "/queries"
operations:
- name: execute-query
method: POST
- type: http
namespace: snowflake
baseUri: "https://fidelity.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: tableau
baseUri: "https://tableau.fidelity.com/api/3.21"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: datasources
path: "/sites/default/datasources/{{datasource_id}}/refresh"
inputParameters:
- name: datasource_id
in: path
operations:
- name: refresh-extract
method: POST
Pulls client risk profile from Salesforce, retrieves model portfolio allocations from FactSet, generates an IPS document, stores it in SharePoint, and emails the client via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Investment Policy Statement Generator"
description: "Pulls client risk profile from Salesforce, retrieves model portfolio allocations from FactSet, generates an IPS document, stores it in SharePoint, and emails the client via Microsoft Outlook."
tags:
- wealth-management
- compliance
- salesforce
- factset
- sharepoint
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: ips-generation
port: 8080
tools:
- name: generate-ips
description: "Generate an Investment Policy Statement for a client based on risk profile and model portfolio."
inputParameters:
- name: account_id
in: body
type: string
description: "Salesforce account ID."
- name: model_portfolio
in: body
type: string
description: "Model portfolio name (conservative, moderate, aggressive)."
steps:
- name: get-client-profile
type: call
call: "salesforce.get-account-detail"
with:
account_id: "{{account_id}}"
- name: get-model-allocation
type: call
call: "factset.get-model-portfolio"
with:
model: "{{model_portfolio}}"
- name: store-ips
type: call
call: "sharepoint.upload-file"
with:
site_id: "wealth-mgmt-clients"
file_path: "Clients/{{get-client-profile.Name}}/IPS/ips_{{model_portfolio}}.pdf"
content: "{\"client\": \"{{get-client-profile}}\", \"allocation\": \"{{get-model-allocation}}\", \"risk_category\": \"{{get-client-profile.risk_category}}\"}"
- name: email-client
type: call
call: "outlook.send-email"
with:
to: "{{get-client-profile.owner_email}}"
subject: "Your Fidelity Investment Policy Statement"
body: "Dear {{get-client-profile.Name}}, your Investment Policy Statement based on your {{get-client-profile.risk_category}} risk profile is ready for review: {{store-ips.url}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://fidelity.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account-detail
method: GET
- type: http
namespace: factset
baseUri: "https://api.factset.com/portfolio/v1"
authentication:
type: basic
username: "$secrets.factset_user"
password: "$secrets.factset_password"
resources:
- name: models
path: "/models/{{model}}/allocation"
inputParameters:
- name: model
in: path
operations:
- name: get-model-portfolio
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:/{{file_path}}:/content"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: send-mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Escalates IT incidents at Fidelity via ServiceNow, PagerDuty, and Slack.
naftiko: "0.5"
info:
label: "IT Incident Escalation Pipeline"
description: "Escalates IT incidents at Fidelity via ServiceNow, PagerDuty, and Slack."
tags:
- incident-management
- servicenow
- pagerduty
- slack
capability:
exposes:
- type: mcp
namespace: incident-escalation
port: 8080
tools:
- name: escalate-incident
description: "Escalate incidents at Fidelity."
inputParameters:
- name: incident_id
in: body
type: string
description: "Incident ID."
- name: severity
in: body
type: string
description: "Severity."
steps:
- name: get-incident
type: call
call: "servicenow.get-incident"
with:
incident_id: "{{incident_id}}"
- name: page
type: call
call: "pagerduty.create-incident"
with:
title: "{{get-incident.description}}"
urgency: "{{severity}}"
- name: channel
type: call
call: "slack.create-channel"
with:
name: "inc-{{incident_id}}"
- name: notify
type: call
call: "slack.post-message"
with:
channel: "#inc-{{incident_id}}"
text: "P{{severity}}: {{get-incident.description}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://fidelity.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident/{{incident_id}}"
inputParameters:
- name: incident_id
in: path
operations:
- name: get-incident
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: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: channels
path: "/conversations.create"
operations:
- name: create-channel
method: POST
Retrieves sprint progress at Fidelity.
naftiko: "0.5"
info:
label: "Jira Sprint Progress Lookup"
description: "Retrieves sprint progress at Fidelity."
tags:
- project-management
- jira
- agile
capability:
exposes:
- type: mcp
namespace: jira-sprint
port: 8080
tools:
- name: get-sprint
description: "Look up sprint at Fidelity."
inputParameters:
- name: project_key
in: body
type: string
description: "Project key."
call: "jira.get-sprints"
with:
project: "{{project_key}}"
outputParameters:
- name: name
type: string
mapping: "$.values[0].name"
- name: state
type: string
mapping: "$.values[0].state"
consumes:
- type: http
namespace: jira
baseUri: "https://fidelity.com.atlassian.net/rest/agile/1.0"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: sprints
path: "/board/1/sprint"
operations:
- name: get-sprints
method: GET
Maintains KB at Fidelity by finding stale articles and notifying owners.
naftiko: "0.5"
info:
label: "Knowledge Base Maintenance Pipeline"
description: "Maintains KB at Fidelity by finding stale articles and notifying owners."
tags:
- knowledge-management
- confluence
- maintenance
capability:
exposes:
- type: mcp
namespace: kb-maint
port: 8080
tools:
- name: maintain-kb
description: "Maintain KB at Fidelity."
inputParameters:
- name: space
in: body
type: string
description: "Confluence space."
- name: stale_days
in: body
type: number
description: "Days threshold."
steps:
- name: find
type: call
call: "confluence.search-stale"
with:
space: "{{space}}"
days: "{{stale_days}}"
- name: notify
type: call
call: "email.batch"
with:
to: "{{find.owners}}"
subject: "KB review needed"
- name: flag
type: call
call: "confluence.add-label"
with:
pages: "{{find.ids}}"
label: "needs-review"
- name: report
type: call
call: "slack.post-message"
with:
channel: "#kb"
text: "KB: {{find.count}} stale articles"
consumes:
- type: http
namespace: confluence
baseUri: "https://fidelity.com.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: content
path: "/content/search"
operations:
- name: search-stale
method: GET
- type: http
namespace: email
baseUri: "https://email.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: batch
path: "/send-batch"
operations:
- name: batch
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Generates KPI digest at Fidelity from Snowflake, Oracle, Power BI, and email.
naftiko: "0.5"
info:
label: "Weekly KPI Digest Pipeline"
description: "Generates KPI digest at Fidelity from Snowflake, Oracle, Power BI, and email."
tags:
- reporting
- kpi
- snowflake
- executive
capability:
exposes:
- type: mcp
namespace: kpi-digest
port: 8080
tools:
- name: gen-digest
description: "Generate KPI digest at Fidelity."
inputParameters:
- name: week
in: body
type: string
description: "Week ending."
- name: dist
in: body
type: string
description: "Distribution list."
steps:
- name: ops
type: call
call: "snowflake.query"
with:
query: "SELECT * FROM kpis WHERE w='{{week}}'"
- name: fin
type: call
call: "oracle.get-summary"
with:
period: "{{week}}"
- name: refresh
type: call
call: "power-bi.refresh"
with:
dataset: "exec_kpis"
- name: send
type: call
call: "email.send"
with:
to: "{{dist}}"
subject: "KPIs - {{week}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://fidelity.com.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: oracle
baseUri: "https://oracle.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: fin
path: "/summary"
operations:
- name: get-summary
method: GET
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset}}/refreshes"
inputParameters:
- name: dataset
in: path
operations:
- name: refresh
method: POST
- type: http
namespace: email
baseUri: "https://email.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
Checks K8s pod health at Fidelity.
naftiko: "0.5"
info:
label: "K8s Pod Health"
description: "Checks K8s pod health at Fidelity."
tags:
- containers
- kubernetes
- infrastructure
capability:
exposes:
- type: mcp
namespace: k8s-pod
port: 8080
tools:
- name: check-pod
description: "Check pod at Fidelity."
inputParameters:
- name: namespace
in: body
type: string
description: "Namespace."
- name: pod
in: body
type: string
description: "Pod name."
call: "k8s.get-pod"
with:
namespace: "{{namespace}}"
pod: "{{pod}}"
outputParameters:
- name: phase
type: string
mapping: "$.status.phase"
consumes:
- type: http
namespace: k8s
baseUri: "https://k8s.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.k8s_token"
resources:
- name: pods
path: "/namespaces/{{namespace}}/pods/{{pod}}"
inputParameters:
- name: namespace
in: path
- name: pod
in: path
operations:
- name: get-pod
method: GET
Queries Kubernetes cluster for trading application pod health, correlates with Grafana metrics, and creates a Jira issue if degradation is detected.
naftiko: "0.5"
info:
label: "Kubernetes Trading Pod Health Check"
description: "Queries Kubernetes cluster for trading application pod health, correlates with Grafana metrics, and creates a Jira issue if degradation is detected."
tags:
- operations
- trading
- grafana
- jira
capability:
exposes:
- type: mcp
namespace: k8s-health
port: 8080
tools:
- name: check-trading-pods
description: "Check health of trading application pods and escalate degradation to Jira."
inputParameters:
- name: namespace
in: body
type: string
description: "Kubernetes namespace for trading pods."
- name: grafana_dashboard_uid
in: body
type: string
description: "Grafana dashboard UID for trading metrics."
steps:
- name: get-metrics
type: call
call: "grafana.query-dashboard"
with:
dashboard_uid: "{{grafana_dashboard_uid}}"
from: "now-1h"
to: "now"
- name: create-issue
type: call
call: "jira.create-issue"
with:
project: "TRADEOPS"
summary: "Trading pod degradation in {{namespace}}"
description: "Grafana metrics indicate degradation in namespace {{namespace}}. Dashboard: {{grafana_dashboard_uid}}. Error rate: {{get-metrics.error_rate}}. P99 latency: {{get-metrics.p99_latency}}ms"
issue_type: "Bug"
priority: "High"
consumes:
- type: http
namespace: grafana
baseUri: "https://grafana.fidelity.com/api"
authentication:
type: bearer
token: "$secrets.grafana_token"
resources:
- name: dashboards
path: "/dashboards/uid/{{dashboard_uid}}"
inputParameters:
- name: dashboard_uid
in: path
operations:
- name: query-dashboard
method: GET
- type: http
namespace: jira
baseUri: "https://fidelity.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Collects KYC documents for a new client by creating a Salesforce case, provisioning a secure Box folder for uploads, and sending document request emails via Microsoft Outlook.
naftiko: "0.5"
info:
label: "KYC Document Collection Pipeline"
description: "Collects KYC documents for a new client by creating a Salesforce case, provisioning a secure Box folder for uploads, and sending document request emails via Microsoft Outlook."
tags:
- compliance
- onboarding
- salesforce
- box
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: kyc-workflow
port: 8080
tools:
- name: initiate-kyc-collection
description: "Start the KYC document collection process for a new client."
inputParameters:
- name: client_name
in: body
type: string
description: "Client full name."
- name: client_email
in: body
type: string
description: "Client email address."
- name: account_type
in: body
type: string
description: "Account type (individual, joint, trust, corporate)."
steps:
- name: create-case
type: call
call: "salesforce.create-case"
with:
subject: "KYC Collection: {{client_name}}"
type: "KYC"
account_type: "{{account_type}}"
contact_email: "{{client_email}}"
- name: create-secure-folder
type: call
call: "box.create-folder"
with:
parent_id: "kyc_uploads"
name: "KYC_{{client_name}}_{{create-case.CaseNumber}}"
- name: send-request
type: call
call: "outlook.send-email"
with:
to: "{{client_email}}"
subject: "Fidelity - Document Upload Required for Account Opening"
body: "Dear {{client_name}}, please upload your identification documents to the secure folder: {{create-secure-folder.shared_link}}. Required: government ID, proof of address, and tax forms. Case reference: {{create-case.CaseNumber}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://fidelity.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
operations:
- name: create-case
method: POST
- type: http
namespace: box
baseUri: "https://api.box.com/2.0"
authentication:
type: bearer
token: "$secrets.box_token"
resources:
- name: folders
path: "/folders"
operations:
- name: create-folder
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: send-mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Checks license compliance at Fidelity via scanning, entitlements, and procurement.
naftiko: "0.5"
info:
label: "License Compliance Pipeline"
description: "Checks license compliance at Fidelity via scanning, entitlements, and procurement."
tags:
- compliance
- licensing
- procurement
capability:
exposes:
- type: mcp
namespace: license-comp
port: 8080
tools:
- name: check-licenses
description: "Check license compliance at Fidelity."
inputParameters:
- name: software
in: body
type: string
description: "Software."
- name: vendor
in: body
type: string
description: "Vendor."
steps:
- name: scan
type: call
call: "assets.installations"
with:
sw: "{{software}}"
- name: entitlements
type: call
call: "licenses.get"
with:
sw: "{{software}}"
- name: flag
type: call
call: "compliance.flag"
with:
installed: "{{scan.count}}"
entitled: "{{entitlements.count}}"
- name: procure
type: call
call: "servicenow.create-request"
with:
type: "license"
sw: "{{software}}"
consumes:
- type: http
namespace: assets
baseUri: "https://assets.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.asset_token"
resources:
- name: installations
path: "/installations"
operations:
- name: installations
method: GET
- type: http
namespace: licenses
baseUri: "https://licenses.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.license_token"
resources:
- name: ent
path: "/entitlements"
operations:
- name: get
method: GET
- type: http
namespace: compliance
baseUri: "https://compliance.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.compliance_token"
resources:
- name: overages
path: "/flag"
operations:
- name: flag
method: POST
- type: http
namespace: servicenow
baseUri: "https://fidelity.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
Pulls end-of-day pricing from Bloomberg Enterprise Data, validates against FactSet, loads into Snowflake, and publishes a completion event to Apache Kafka for downstream consumers.
naftiko: "0.5"
info:
label: "Market Data Ingestion Pipeline"
description: "Pulls end-of-day pricing from Bloomberg Enterprise Data, validates against FactSet, loads into Snowflake, and publishes a completion event to Apache Kafka for downstream consumers."
tags:
- market-data
- data-engineering
- bloomberg-enterprise-data
- factset
- snowflake
- apache-kafka
capability:
exposes:
- type: mcp
namespace: market-data-pipeline
port: 8080
tools:
- name: run-eod-pricing-load
description: "Execute the end-of-day market data ingestion pipeline across Bloomberg, FactSet, Snowflake, and Kafka."
inputParameters:
- name: pricing_date
in: body
type: string
description: "Pricing date in YYYY-MM-DD format."
- name: asset_class
in: body
type: string
description: "Asset class (equity, fixed_income, derivatives)."
steps:
- name: fetch-bloomberg-prices
type: call
call: "bloomberg.get-eod-prices"
with:
date: "{{pricing_date}}"
asset_class: "{{asset_class}}"
- name: fetch-factset-prices
type: call
call: "factset.get-eod-prices"
with:
date: "{{pricing_date}}"
asset_class: "{{asset_class}}"
- name: load-validated-prices
type: call
call: "snowflake.execute-query"
with:
statement: "CALL load_validated_eod_prices('{{pricing_date}}', '{{asset_class}}', '{{fetch-bloomberg-prices.output_path}}', '{{fetch-factset-prices.output_path}}')"
- name: publish-completion
type: call
call: "kafka.publish-event"
with:
topic: "market-data-events"
key: "eod-pricing-{{pricing_date}}"
value: "{\"status\": \"complete\", \"date\": \"{{pricing_date}}\", \"asset_class\": \"{{asset_class}}\", \"record_count\": \"{{load-validated-prices.rows_loaded}}\"}"
consumes:
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
authentication:
type: bearer
token: "$secrets.bloomberg_api_token"
resources:
- name: eod-prices
path: "/pricing/eod"
operations:
- name: get-eod-prices
method: POST
- type: http
namespace: factset
baseUri: "https://api.factset.com/content/v1"
authentication:
type: basic
username: "$secrets.factset_user"
password: "$secrets.factset_password"
resources:
- name: prices
path: "/prices/eod"
operations:
- name: get-eod-prices
method: POST
- type: http
namespace: snowflake
baseUri: "https://fidelity.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: kafka
baseUri: "https://kafka-rest.fidelity.com/v3"
authentication:
type: bearer
token: "$secrets.kafka_rest_token"
resources:
- name: records
path: "/clusters/fidelity-prod/topics/{{topic}}/records"
inputParameters:
- name: topic
in: path
operations:
- name: publish-event
method: POST
Pulls model output from Azure Machine Learning, validates against historical data in Snowflake, generates a validation report in SharePoint, and creates a Jira ticket for model governance review.
naftiko: "0.5"
info:
label: "Model Risk Validation Pipeline"
description: "Pulls model output from Azure Machine Learning, validates against historical data in Snowflake, generates a validation report in SharePoint, and creates a Jira ticket for model governance review."
tags:
- risk-management
- compliance
- azure-machine-learning
- snowflake
- sharepoint
- jira
capability:
exposes:
- type: mcp
namespace: model-validation
port: 8080
tools:
- name: validate-risk-model
description: "Run model validation pipeline for risk model governance."
inputParameters:
- name: model_name
in: body
type: string
description: "Azure ML model name."
- name: model_version
in: body
type: string
description: "Model version to validate."
steps:
- name: get-model-metrics
type: call
call: "azureml.get-model-metrics"
with:
model_name: "{{model_name}}"
version: "{{model_version}}"
- name: run-backtests
type: call
call: "snowflake.execute-query"
with:
statement: "CALL run_model_backtest('{{model_name}}', '{{model_version}}', '{{get-model-metrics.training_date}}')"
- name: store-report
type: call
call: "sharepoint.upload-file"
with:
site_id: "model-governance"
file_path: "Validations/{{model_name}}/v{{model_version}}_validation.json"
content: "{\"model\": \"{{model_name}}\", \"version\": \"{{model_version}}\", \"metrics\": \"{{get-model-metrics}}\", \"backtest\": \"{{run-backtests}}\"}"
- name: create-review-ticket
type: call
call: "jira.create-issue"
with:
project: "MRGOV"
summary: "Model validation: {{model_name}} v{{model_version}}"
description: "Model validation complete. Report: {{store-report.url}}. Accuracy: {{get-model-metrics.accuracy}}. Backtest pass rate: {{run-backtests.pass_rate}}%"
issue_type: "Task"
consumes:
- type: http
namespace: azureml
baseUri: "https://fidelity-ml.api.azureml.ms/mlflow/v2.0"
authentication:
type: bearer
token: "$secrets.azureml_token"
resources:
- name: models
path: "/models/{{model_name}}/versions/{{version}}/metrics"
inputParameters:
- name: model_name
in: path
- name: version
in: path
operations:
- name: get-model-metrics
method: GET
- type: http
namespace: snowflake
baseUri: "https://fidelity.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: drive-items
path: "/{{site_id}}/drive/root:/{{file_path}}:/content"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: jira
baseUri: "https://fidelity.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Generates monthly security reports at Fidelity from Splunk and Qualys.
naftiko: "0.5"
info:
label: "Monthly Security Report Pipeline"
description: "Generates monthly security reports at Fidelity from Splunk and Qualys."
tags:
- security
- reporting
- splunk
- compliance
capability:
exposes:
- type: mcp
namespace: sec-report
port: 8080
tools:
- name: gen-sec-report
description: "Generate security report at Fidelity."
inputParameters:
- name: month
in: body
type: string
description: "Month."
steps:
- name: splunk
type: call
call: "splunk.search"
with:
query: "index=security earliest=-30d"
- name: scans
type: call
call: "qualys.results"
with:
month: "{{month}}"
- name: compile
type: call
call: "analytics.compile-security"
with:
events: "{{splunk.count}}"
vulns: "{{scans.critical}}"
- name: send
type: call
call: "email.send"
with:
to: "ciso@co.com"
subject: "Security - {{month}}"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.fidelity.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search
path: "/search/jobs"
operations:
- name: search
method: POST
- type: http
namespace: qualys
baseUri: "https://qualysapi.qualys.com/api/v2"
authentication:
type: bearer
token: "$secrets.qualys_token"
resources:
- name: results
path: "/fo/scan/results"
operations:
- name: results
method: GET
- type: http
namespace: analytics
baseUri: "https://analytics.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: security
path: "/compile"
operations:
- name: compile-security
method: POST
- type: http
namespace: email
baseUri: "https://email.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
Routes a multi-asset trade order by checking Bloomberg AIM for best execution venue, submitting to Tradeweb for fixed income or Bloomberg AIM for equity, logging in Snowflake, and notifying the trader via Microsoft Teams.
naftiko: "0.5"
info:
label: "Multi-Asset Order Routing Pipeline"
description: "Routes a multi-asset trade order by checking Bloomberg AIM for best execution venue, submitting to Tradeweb for fixed income or Bloomberg AIM for equity, logging in Snowflake, and notifying the trader via Microsoft Teams."
tags:
- trading
- order-management
- bloomberg-aim
- tradeweb
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: order-routing
port: 8080
tools:
- name: route-multi-asset-order
description: "Route a trade order to the appropriate execution venue based on asset class."
inputParameters:
- name: order_id
in: body
type: string
description: "Internal order identifier."
- name: asset_class
in: body
type: string
description: "Asset class (equity, fixed_income)."
- name: ticker
in: body
type: string
description: "Security identifier."
- name: side
in: body
type: string
description: "BUY or SELL."
- name: quantity
in: body
type: integer
description: "Order quantity."
- name: trader_email
in: body
type: string
description: "Trader email for notification."
steps:
- name: get-venue
type: call
call: "aim.get-best-venue"
with:
ticker: "{{ticker}}"
asset_class: "{{asset_class}}"
- name: submit-order
type: call
call: "aim.submit-order"
with:
order_id: "{{order_id}}"
venue: "{{get-venue.recommended_venue}}"
ticker: "{{ticker}}"
side: "{{side}}"
quantity: "{{quantity}}"
- name: log-execution
type: call
call: "snowflake.execute-query"
with:
statement: "INSERT INTO order_routing_log (order_id, asset_class, venue, ticker, side, quantity, status) VALUES ('{{order_id}}', '{{asset_class}}', '{{get-venue.recommended_venue}}', '{{ticker}}', '{{side}}', {{quantity}}, '{{submit-order.status}}')"
- name: notify-trader
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{trader_email}}"
text: "Order {{order_id}} routed to {{get-venue.recommended_venue}}: {{side}} {{quantity}} {{ticker}}. Status: {{submit-order.status}}. Fill price: {{submit-order.fill_price}}"
consumes:
- type: http
namespace: aim
baseUri: "https://aim.bloomberg.com/api/v1"
authentication:
type: bearer
token: "$secrets.bloomberg_aim_token"
resources:
- name: venues
path: "/venues/best?ticker={{ticker}}&asset_class={{asset_class}}"
inputParameters:
- name: ticker
in: query
- name: asset_class
in: query
operations:
- name: get-best-venue
method: GET
- name: orders
path: "/orders"
operations:
- name: submit-order
method: POST
- type: http
namespace: snowflake
baseUri: "https://fidelity.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chat-messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Calculates final NAV in SimCorp Dimension, validates against Bloomberg pricing, publishes to Snowflake for distribution, and sends confirmation to fund operations via Microsoft Teams.
naftiko: "0.5"
info:
label: "Mutual Fund NAV Publication"
description: "Calculates final NAV in SimCorp Dimension, validates against Bloomberg pricing, publishes to Snowflake for distribution, and sends confirmation to fund operations via Microsoft Teams."
tags:
- fund-accounting
- operations
- simcorp-dimension
- bloomberg-enterprise-data
- snowflake
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: nav-publication
port: 8080
tools:
- name: publish-fund-nav
description: "Calculate, validate, and publish mutual fund NAV with operations notification."
inputParameters:
- name: fund_code
in: body
type: string
description: "Fund identifier."
- name: valuation_date
in: body
type: string
description: "Valuation date in YYYY-MM-DD format."
- name: ops_email
in: body
type: string
description: "Fund operations team email."
steps:
- name: calculate-nav
type: call
call: "simcorp.calculate-nav"
with:
fund_code: "{{fund_code}}"
date: "{{valuation_date}}"
- name: validate-prices
type: call
call: "bloomberg.validate-fund-prices"
with:
fund_code: "{{fund_code}}"
expected_nav: "{{calculate-nav.nav_per_share}}"
- name: publish-nav
type: call
call: "snowflake.execute-query"
with:
statement: "INSERT INTO fund_nav (fund_code, valuation_date, nav_per_share, shares_outstanding, total_net_assets) VALUES ('{{fund_code}}', '{{valuation_date}}', {{calculate-nav.nav_per_share}}, {{calculate-nav.shares_outstanding}}, {{calculate-nav.total_net_assets}})"
- name: confirm-ops
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{ops_email}}"
text: "NAV published for {{fund_code}} as of {{valuation_date}}: ${{calculate-nav.nav_per_share}}/share. Validation status: {{validate-prices.status}}. TNA: ${{calculate-nav.total_net_assets}}"
consumes:
- type: http
namespace: simcorp
baseUri: "https://simcorp.fidelity.com/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: nav-calculation
path: "/funds/{{fund_code}}/nav/calculate?date={{date}}"
inputParameters:
- name: fund_code
in: path
- name: date
in: query
operations:
- name: calculate-nav
method: POST
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
authentication:
type: bearer
token: "$secrets.bloomberg_api_token"
resources:
- name: fund-validation
path: "/pricing/validate"
operations:
- name: validate-fund-prices
method: POST
- type: http
namespace: snowflake
baseUri: "https://fidelity.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chat-messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
When a new wealth management client is created in Salesforce, provisions a SharePoint document library, creates a Jira onboarding task, and sends a Microsoft Teams notification to the assigned advisor.
naftiko: "0.5"
info:
label: "New Client Onboarding Orchestrator"
description: "When a new wealth management client is created in Salesforce, provisions a SharePoint document library, creates a Jira onboarding task, and sends a Microsoft Teams notification to the assigned advisor."
tags:
- wealth-management
- onboarding
- salesforce
- sharepoint
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: client-onboarding
port: 8080
tools:
- name: onboard-new-client
description: "Orchestrate the full onboarding workflow for a new wealth management client across Salesforce, SharePoint, Jira, and Teams."
inputParameters:
- name: salesforce_account_id
in: body
type: string
description: "Salesforce Account ID for the new client."
- name: advisor_email
in: body
type: string
description: "Email of the assigned financial advisor."
steps:
- name: get-client
type: call
call: "salesforce.get-account"
with:
account_id: "{{salesforce_account_id}}"
- name: create-doc-library
type: call
call: "sharepoint.create-folder"
with:
site_id: "wealth-mgmt-clients"
folder_path: "Clients/{{get-client.Name}}"
- name: create-onboarding-task
type: call
call: "jira.create-issue"
with:
project: "WMONB"
summary: "Client onboarding: {{get-client.Name}}"
description: "Complete KYC, risk profile, and IPS for new client {{get-client.Name}}. Documents: {{create-doc-library.url}}"
issue_type: "Task"
assignee: "{{advisor_email}}"
- name: notify-advisor
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{advisor_email}}"
text: "New client onboarding started for {{get-client.Name}}. Jira task: {{create-onboarding-task.key}}. Document folder: {{create-doc-library.url}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://fidelity.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: 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: jira
baseUri: "https://fidelity.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_api_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chat-messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Onboards employees at Fidelity with Okta, ServiceNow, Slack, and calendar.
naftiko: "0.5"
info:
label: "New Employee IT Onboarding Pipeline"
description: "Onboards employees at Fidelity with Okta, ServiceNow, Slack, and calendar."
tags:
- hr
- onboarding
- okta
- servicenow
- slack
capability:
exposes:
- type: mcp
namespace: it-onboarding
port: 8080
tools:
- name: onboard-employee
description: "Onboard employees at Fidelity."
inputParameters:
- name: name
in: body
type: string
description: "Name."
- name: dept
in: body
type: string
description: "Department."
- name: start
in: body
type: string
description: "Start date."
steps:
- name: okta
type: call
call: "okta.create-user"
with:
name: "{{name}}"
department: "{{dept}}"
- name: equip
type: call
call: "servicenow.create-request"
with:
type: "new_hire"
for: "{{name}}"
- name: slack
type: call
call: "slack.invite"
with:
email: "{{okta.email}}"
- name: orient
type: call
call: "calendar.create-event"
with:
title: "Orientation - {{name}}"
date: "{{start}}"
consumes:
- type: http
namespace: okta
baseUri: "https://fidelity.com.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: servicenow
baseUri: "https://fidelity.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: requests
path: "/table/sc_request"
operations:
- name: create-request
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: users
path: "/users.admin.invite"
operations:
- name: invite
method: POST
- type: http
namespace: calendar
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.microsoft_graph_token"
resources:
- name: events
path: "/users/hr/events"
operations:
- name: create-event
method: POST
Checks New Relic APM at Fidelity.
naftiko: "0.5"
info:
label: "New Relic APM Check"
description: "Checks New Relic APM at Fidelity."
tags:
- monitoring
- new-relic
- apm
capability:
exposes:
- type: mcp
namespace: nr-apm
port: 8080
tools:
- name: check-apm
description: "Check APM at Fidelity."
inputParameters:
- name: app_id
in: body
type: string
description: "App ID."
call: "newrelic.get-app"
with:
app_id: "{{app_id}}"
outputParameters:
- name: health
type: string
mapping: "$.application.health_status"
consumes:
- type: http
namespace: newrelic
baseUri: "https://api.newrelic.com/v2"
authentication:
type: bearer
token: "$secrets.new_relic_api_key"
resources:
- name: applications
path: "/applications/{{app_id}}.json"
inputParameters:
- name: app_id
in: path
operations:
- name: get-app
method: GET
Fetches application performance metrics from New Relic for a given trading service, returning response time, throughput, and error rate.
naftiko: "0.5"
info:
label: "New Relic APM Performance Report"
description: "Fetches application performance metrics from New Relic for a given trading service, returning response time, throughput, and error rate."
tags:
- monitoring
- operations
- new-relic
capability:
exposes:
- type: mcp
namespace: apm-metrics
port: 8080
tools:
- name: get-app-performance
description: "Retrieve New Relic APM metrics for a trading application."
inputParameters:
- name: app_id
in: body
type: string
description: "New Relic application ID."
- name: time_range
in: body
type: string
description: "Time range (e.g., last_hour, last_24h)."
call: "newrelic.get-app-metrics"
with:
app_id: "{{app_id}}"
time_range: "{{time_range}}"
consumes:
- type: http
namespace: newrelic
baseUri: "https://api.newrelic.com/v2"
authentication:
type: apiKey
key: "$secrets.newrelic_api_key"
resources:
- name: applications
path: "/applications/{{app_id}}/metrics/data.json"
inputParameters:
- name: app_id
in: path
operations:
- name: get-app-metrics
method: GET
Checks Okta user at Fidelity.
naftiko: "0.5"
info:
label: "Okta User Check"
description: "Checks Okta user at Fidelity."
tags:
- identity
- okta
- access-management
capability:
exposes:
- type: mcp
namespace: okta-user
port: 8080
tools:
- name: check-user
description: "Check user at Fidelity."
inputParameters:
- name: email
in: body
type: string
description: "Email."
call: "okta.get-user"
with:
email: "{{email}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: okta
baseUri: "https://fidelity.com.okta.com/api/v1"
authentication:
type: bearer
token: "$secrets.okta_api_token"
resources:
- name: users
path: "/users/{{email}}"
inputParameters:
- name: email
in: path
operations:
- name: get-user
method: GET
Checks on-call at Fidelity.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Check"
description: "Checks on-call at Fidelity."
tags:
- incident-management
- pagerduty
- on-call
capability:
exposes:
- type: mcp
namespace: pd-oncall
port: 8080
tools:
- name: get-oncall
description: "Check on-call at Fidelity."
inputParameters:
- name: schedule_id
in: body
type: string
description: "Schedule ID."
call: "pagerduty.get-oncall"
with:
schedule_id: "{{schedule_id}}"
outputParameters:
- name: user
type: string
mapping: "$.oncalls[0].user.summary"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: oncalls
path: "/oncalls"
operations:
- name: get-oncall
method: GET
Pulls portfolio drift data from FactSet, generates a rebalance proposal, stores it in SharePoint, and notifies the portfolio manager via Microsoft Teams.
naftiko: "0.5"
info:
label: "Portfolio Rebalance Notification Pipeline"
description: "Pulls portfolio drift data from FactSet, generates a rebalance proposal, stores it in SharePoint, and notifies the portfolio manager via Microsoft Teams."
tags:
- portfolio-management
- rebalancing
- factset
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: portfolio-rebalance
port: 8080
tools:
- name: trigger-rebalance-review
description: "Detect portfolio drift in FactSet, store a rebalance proposal, and notify the portfolio manager."
inputParameters:
- name: portfolio_id
in: body
type: string
description: "FactSet portfolio identifier."
- name: drift_threshold
in: body
type: number
description: "Maximum allowable drift percentage."
- name: pm_email
in: body
type: string
description: "Portfolio manager email address."
steps:
- name: get-drift
type: call
call: "factset.get-drift-analysis"
with:
portfolio_id: "{{portfolio_id}}"
threshold: "{{drift_threshold}}"
- name: store-proposal
type: call
call: "sharepoint.upload-file"
with:
site_id: "portfolio-management"
file_path: "Rebalance/{{portfolio_id}}/proposal_{{get-drift.analysis_date}}.json"
content: "{{get-drift.rebalance_proposal}}"
- name: notify-pm
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{pm_email}}"
text: "Portfolio {{portfolio_id}} has drifted beyond {{drift_threshold}}% threshold. Rebalance proposal ready: {{store-proposal.url}}"
consumes:
- type: http
namespace: factset
baseUri: "https://api.factset.com/portfolio/v1"
authentication:
type: basic
username: "$secrets.factset_user"
password: "$secrets.factset_password"
resources:
- name: drift-analysis
path: "/portfolios/{{portfolio_id}}/drift?threshold={{threshold}}"
inputParameters:
- name: portfolio_id
in: path
- name: threshold
in: query
operations:
- name: get-drift-analysis
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:/{{file_path}}:/content"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chat-messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Creates postmortems at Fidelity.
naftiko: "0.5"
info:
label: "Incident Postmortem Pipeline"
description: "Creates postmortems at Fidelity."
tags:
- incident-management
- postmortem
- pagerduty
- confluence
capability:
exposes:
- type: mcp
namespace: postmortem
port: 8080
tools:
- name: create-postmortem
description: "Create postmortem at Fidelity."
inputParameters:
- name: incident_id
in: body
type: string
description: "Incident ID."
steps:
- name: timeline
type: call
call: "pagerduty.get-log"
with:
id: "{{incident_id}}"
- name: metrics
type: call
call: "datadog.get-metrics"
with:
incident: "{{incident_id}}"
- name: doc
type: call
call: "confluence.create-page"
with:
title: "Postmortem: {{timeline.title}}"
body: "Impact: {{metrics.impact}}"
- name: review
type: call
call: "calendar.create-event"
with:
title: "Review: {{timeline.title}}"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents/{{id}}/log_entries"
inputParameters:
- name: id
in: path
operations:
- name: get-log
method: GET
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v2"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: incidents
path: "/incidents"
operations:
- name: get-metrics
method: GET
- type: http
namespace: confluence
baseUri: "https://fidelity.com.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: calendar
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.microsoft_graph_token"
resources:
- name: events
path: "/users/sre/events"
operations:
- name: create-event
method: POST
Checks Power BI refresh at Fidelity.
naftiko: "0.5"
info:
label: "Power BI Refresh Check"
description: "Checks Power BI refresh at Fidelity."
tags:
- analytics
- power-bi
- dashboards
capability:
exposes:
- type: mcp
namespace: pbi-refresh
port: 8080
tools:
- name: check-refresh
description: "Check refresh at Fidelity."
inputParameters:
- name: dataset_id
in: body
type: string
description: "Dataset ID."
call: "power-bi.get-refresh"
with:
dataset_id: "{{dataset_id}}"
outputParameters:
- name: status
type: string
mapping: "$.value[0].status"
consumes:
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: get-refresh
method: GET
Queries Prometheus for trading system latency metrics and returns P50, P95, and P99 percentiles for a given service.
naftiko: "0.5"
info:
label: "Prometheus Trading Latency Alert"
description: "Queries Prometheus for trading system latency metrics and returns P50, P95, and P99 percentiles for a given service."
tags:
- monitoring
- trading
- prometheus
capability:
exposes:
- type: mcp
namespace: latency-monitoring
port: 8080
tools:
- name: get-trading-latency
description: "Query Prometheus for trading service latency percentiles."
inputParameters:
- name: service_name
in: body
type: string
description: "Trading service name."
- name: time_range
in: body
type: string
description: "Time range for query (e.g., 5m, 1h)."
call: "prometheus.query-range"
with:
query: "histogram_quantile(0.99, rate(trade_execution_duration_seconds_bucket{service=\"{{service_name}}\"}[{{time_range}}]))"
consumes:
- type: http
namespace: prometheus
baseUri: "https://prometheus.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.prometheus_token"
resources:
- name: query
path: "/query"
operations:
- name: query-range
method: POST
Generates compliance reports at Fidelity from Snowflake, Power BI, and email.
naftiko: "0.5"
info:
label: "Quarterly Compliance Report Pipeline"
description: "Generates compliance reports at Fidelity from Snowflake, Power BI, and email."
tags:
- compliance
- reporting
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: compliance-rpt
port: 8080
tools:
- name: gen-report
description: "Generate compliance reports at Fidelity."
inputParameters:
- name: quarter
in: body
type: string
description: "Quarter."
- name: type
in: body
type: string
description: "Type."
steps:
- name: data
type: call
call: "snowflake.query"
with:
query: "SELECT * FROM compliance WHERE q='{{quarter}}'"
- name: metrics
type: call
call: "analytics.compute"
with:
data: "{{data.results}}"
- name: refresh
type: call
call: "power-bi.refresh"
with:
dataset: "compliance"
- name: send
type: call
call: "email.send"
with:
to: "compliance@co.com"
subject: "{{type}} - {{quarter}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://fidelity.com.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: query
method: POST
- type: http
namespace: analytics
baseUri: "https://analytics.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: metrics
path: "/compute"
operations:
- name: compute
method: POST
- type: http
namespace: power-bi
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.power_bi_token"
resources:
- name: datasets
path: "/datasets/{{dataset}}/refreshes"
inputParameters:
- name: dataset
in: path
operations:
- name: refresh
method: POST
- type: http
namespace: email
baseUri: "https://email.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
Invalidates Redis cache keys for trading reference data, then reloads fresh data from Snowflake to ensure downstream trading systems have current reference data.
naftiko: "0.5"
info:
label: "Redis Cache Invalidation and Reload"
description: "Invalidates Redis cache keys for trading reference data, then reloads fresh data from Snowflake to ensure downstream trading systems have current reference data."
tags:
- operations
- caching
- redis
- snowflake
capability:
exposes:
- type: mcp
namespace: cache-mgmt
port: 8080
tools:
- name: invalidate-and-reload-cache
description: "Delete cache keys from Redis and reload fresh reference data from Snowflake."
inputParameters:
- name: key_pattern
in: body
type: string
description: "Redis key pattern to invalidate (e.g., refdata:equity:*)."
- name: data_source_table
in: body
type: string
description: "Snowflake table to reload from."
steps:
- name: invalidate-keys
type: call
call: "redis.delete-keys"
with:
pattern: "{{key_pattern}}"
- name: reload-data
type: call
call: "snowflake.execute-query"
with:
statement: "CALL reload_cache_data('{{data_source_table}}', '{{key_pattern}}')"
consumes:
- type: http
namespace: redis
baseUri: "https://redis.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.redis_token"
resources:
- name: keys
path: "/keys/delete"
operations:
- name: delete-keys
method: POST
- type: http
namespace: snowflake
baseUri: "https://fidelity.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Checks Redis at Fidelity.
naftiko: "0.5"
info:
label: "Redis Cache Status"
description: "Checks Redis at Fidelity."
tags:
- caching
- redis
- infrastructure
capability:
exposes:
- type: mcp
namespace: redis
port: 8080
tools:
- name: check-cache
description: "Check Redis at Fidelity."
inputParameters:
- name: instance
in: body
type: string
description: "Instance ID."
call: "redis.get-info"
with:
instance: "{{instance}}"
outputParameters:
- name: memory
type: string
mapping: "$.used_memory_human"
consumes:
- type: http
namespace: redis
baseUri: "https://redis.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.redis_token"
resources:
- name: instances
path: "/instances/{{instance}}/info"
inputParameters:
- name: instance
in: path
operations:
- name: get-info
method: GET
Extracts position data from SimCorp Dimension, enriches it with market prices from Bloomberg Enterprise Data, transforms via Apache Spark, and loads into Snowflake for regulatory filing.
naftiko: "0.5"
info:
label: "Regulatory Reporting Data Pipeline"
description: "Extracts position data from SimCorp Dimension, enriches it with market prices from Bloomberg Enterprise Data, transforms via Apache Spark, and loads into Snowflake for regulatory filing."
tags:
- compliance
- regulatory-reporting
- simcorp-dimension
- bloomberg-enterprise-data
- apache-spark
- snowflake
capability:
exposes:
- type: mcp
namespace: regulatory-pipeline
port: 8080
tools:
- name: run-regulatory-extract
description: "Extract, enrich, and load position data for regulatory reporting."
inputParameters:
- name: report_date
in: body
type: string
description: "Reporting date in YYYY-MM-DD format."
- name: regulation_type
in: body
type: string
description: "Regulation type (form_pf, form_n_port, form_13f)."
steps:
- name: extract-positions
type: call
call: "simcorp.get-positions"
with:
as_of_date: "{{report_date}}"
- name: enrich-prices
type: call
call: "bloomberg.get-bulk-prices"
with:
securities: "{{extract-positions.security_ids}}"
date: "{{report_date}}"
- name: submit-transform
type: call
call: "spark.submit-job"
with:
job_name: "regulatory_transform_{{regulation_type}}"
params: "{\"positions\": \"{{extract-positions.output_path}}\", \"prices\": \"{{enrich-prices.output_path}}\", \"report_date\": \"{{report_date}}\"}"
- name: load-to-warehouse
type: call
call: "snowflake.execute-query"
with:
statement: "CALL load_regulatory_data('{{regulation_type}}', '{{report_date}}', '{{submit-transform.output_path}}')"
consumes:
- type: http
namespace: simcorp
baseUri: "https://simcorp.fidelity.com/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: positions
path: "/positions?as_of_date={{as_of_date}}"
inputParameters:
- name: as_of_date
in: query
operations:
- name: get-positions
method: GET
- type: http
namespace: bloomberg
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
authentication:
type: bearer
token: "$secrets.bloomberg_api_token"
resources:
- name: bulk-prices
path: "/pricing"
operations:
- name: get-bulk-prices
method: POST
- type: http
namespace: spark
baseUri: "https://spark.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.spark_token"
resources:
- name: jobs
path: "/batches"
operations:
- name: submit-job
method: POST
- type: http
namespace: snowflake
baseUri: "https://fidelity.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Checks release readiness at Fidelity.
naftiko: "0.5"
info:
label: "Release Readiness Pipeline"
description: "Checks release readiness at Fidelity."
tags:
- release-management
- devops
- quality
capability:
exposes:
- type: mcp
namespace: release-ready
port: 8080
tools:
- name: check-release
description: "Check release at Fidelity."
inputParameters:
- name: release_id
in: body
type: string
description: "Release ID."
- name: project
in: body
type: string
description: "Project."
steps:
- name: tests
type: call
call: "azdo.get-tests"
with:
project: "{{project}}"
release: "{{release_id}}"
- name: quality
type: call
call: "sonarqube.get-gate"
with:
project: "{{project}}"
- name: security
type: call
call: "security.get-scan"
with:
project: "{{project}}"
- name: doc
type: call
call: "confluence.create-page"
with:
title: "Release - {{release_id}}"
body: "Tests: {{tests.pass_rate}}% Quality: {{quality.status}}"
consumes:
- type: http
namespace: azdo
baseUri: "https://dev.azure.com/fidelity.com"
authentication:
type: bearer
token: "$secrets.azdo_token"
resources:
- name: tests
path: "/{{project}}/_apis/test/runs"
inputParameters:
- name: project
in: path
operations:
- name: get-tests
method: GET
- type: http
namespace: sonarqube
baseUri: "https://sonarqube.fidelity.com/api"
authentication:
type: bearer
token: "$secrets.sonarqube_token"
resources:
- name: quality
path: "/qualitygates/project_status"
operations:
- name: get-gate
method: GET
- type: http
namespace: security
baseUri: "https://security.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.security_token"
resources:
- name: scans
path: "/results"
operations:
- name: get-scan
method: GET
- type: http
namespace: confluence
baseUri: "https://fidelity.com.atlassian.net/wiki/rest/api"
authentication:
type: bearer
token: "$secrets.confluence_token"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Processes a retirement account distribution by validating eligibility in Salesforce, calculating tax withholding in Snowflake, creating the distribution record, and sending confirmation via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Retirement Account Distribution Processor"
description: "Processes a retirement account distribution by validating eligibility in Salesforce, calculating tax withholding in Snowflake, creating the distribution record, and sending confirmation via Microsoft Outlook."
tags:
- retirement
- compliance
- salesforce
- snowflake
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: retirement-ops
port: 8080
tools:
- name: process-distribution
description: "Process a retirement account distribution with eligibility validation, tax calculation, and email confirmation."
inputParameters:
- name: account_number
in: body
type: string
description: "Retirement account number."
- name: distribution_amount
in: body
type: number
description: "Requested distribution amount in USD."
- name: distribution_type
in: body
type: string
description: "Type of distribution (normal, hardship, rmd)."
steps:
- name: validate-account
type: call
call: "salesforce.get-retirement-account"
with:
account_number: "{{account_number}}"
- name: calculate-withholding
type: call
call: "snowflake.run-tax-calc"
with:
statement: "SELECT calculate_withholding('{{account_number}}', {{distribution_amount}}, '{{distribution_type}}', '{{validate-account.state_of_residence}}') as withholding"
- name: create-distribution
type: call
call: "salesforce.create-distribution"
with:
account_id: "{{validate-account.Id}}"
amount: "{{distribution_amount}}"
withholding: "{{calculate-withholding.withholding}}"
type: "{{distribution_type}}"
- name: send-confirmation
type: call
call: "outlook.send-email"
with:
to: "{{validate-account.owner_email}}"
subject: "Distribution Confirmation - Account {{account_number}}"
body: "Your {{distribution_type}} distribution of ${{distribution_amount}} has been processed. Federal withholding: ${{calculate-withholding.withholding}}. Confirmation: {{create-distribution.confirmation_number}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://fidelity.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: retirement-accounts
path: "/query/?q=SELECT+Id,Name,OwnerId,State__c+FROM+Retirement_Account__c+WHERE+AccountNumber__c='{{account_number}}'"
inputParameters:
- name: account_number
in: query
operations:
- name: get-retirement-account
method: GET
- name: distributions
path: "/sobjects/Distribution__c"
operations:
- name: create-distribution
method: POST
- type: http
namespace: snowflake
baseUri: "https://fidelity.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-tax-calc
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: send-mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Queries Salesforce for wealth management opportunity pipeline data, transforms in Snowflake, and refreshes the Tableau sales dashboard.
naftiko: "0.5"
info:
label: "Salesforce Opportunity Pipeline Report"
description: "Queries Salesforce for wealth management opportunity pipeline data, transforms in Snowflake, and refreshes the Tableau sales dashboard."
tags:
- sales
- reporting
- salesforce
- snowflake
- tableau
capability:
exposes:
- type: mcp
namespace: sales-pipeline
port: 8080
tools:
- name: refresh-pipeline-report
description: "Extract opportunity data from Salesforce, load to Snowflake, and refresh the Tableau dashboard."
inputParameters:
- name: fiscal_quarter
in: body
type: string
description: "Fiscal quarter (e.g., FY2026-Q1)."
steps:
- name: extract-opportunities
type: call
call: "salesforce.query-opportunities"
with:
fiscal_quarter: "{{fiscal_quarter}}"
- name: load-data
type: call
call: "snowflake.execute-query"
with:
statement: "CALL load_opportunity_pipeline('{{fiscal_quarter}}', '{{extract-opportunities.records}}')"
- name: refresh-dashboard
type: call
call: "tableau.refresh-extract"
with:
datasource_id: "wealth-pipeline-ds"
consumes:
- type: http
namespace: salesforce
baseUri: "https://fidelity.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/query/?q=SELECT+Id,Name,Amount,StageName,CloseDate,OwnerId+FROM+Opportunity+WHERE+FiscalQuarter='{{fiscal_quarter}}'"
inputParameters:
- name: fiscal_quarter
in: query
operations:
- name: query-opportunities
method: GET
- type: http
namespace: snowflake
baseUri: "https://fidelity.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: tableau
baseUri: "https://tableau.fidelity.com/api/3.21"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: datasources
path: "/sites/default/datasources/{{datasource_id}}/refresh"
inputParameters:
- name: datasource_id
in: path
operations:
- name: refresh-extract
method: POST
Checks SAP PO at Fidelity.
naftiko: "0.5"
info:
label: "SAP PO Check"
description: "Checks SAP PO at Fidelity."
tags:
- procurement
- sap
- purchase-orders
capability:
exposes:
- type: mcp
namespace: sap-po
port: 8080
tools:
- name: get-po
description: "Check PO at Fidelity."
inputParameters:
- name: po_number
in: body
type: string
description: "PO number."
call: "sap.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: vendor
type: string
mapping: "$.order.vendor"
- name: status
type: string
mapping: "$.order.status"
consumes:
- type: http
namespace: sap
baseUri: "https://sap.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: purchase-orders
path: "/purchase-orders/{{po_number}}"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Remediates vulnerabilities at Fidelity via scanning, Jira, and Slack.
naftiko: "0.5"
info:
label: "Security Vulnerability Remediation Pipeline"
description: "Remediates vulnerabilities at Fidelity via scanning, Jira, and Slack."
tags:
- security
- vulnerability-management
- jira
capability:
exposes:
- type: mcp
namespace: vuln-fix
port: 8080
tools:
- name: remediate
description: "Fix vulnerabilities at Fidelity."
inputParameters:
- name: target
in: body
type: string
description: "Target."
- name: policy
in: body
type: string
description: "Policy."
steps:
- name: scan
type: call
call: "qualys.scan"
with:
target: "{{target}}"
policy: "{{policy}}"
- name: prioritize
type: call
call: "security.prioritize"
with:
scan: "{{scan.id}}"
- name: ticket
type: call
call: "jira.create-issue"
with:
project: "SEC"
summary: "Vulns: {{prioritize.critical}} critical"
- name: notify
type: call
call: "slack.post-message"
with:
channel: "#security"
text: "Scan: {{prioritize.critical}} critical"
consumes:
- type: http
namespace: qualys
baseUri: "https://qualysapi.qualys.com/api/v2"
authentication:
type: bearer
token: "$secrets.qualys_token"
resources:
- name: scans
path: "/fo/scan"
operations:
- name: scan
method: POST
- type: http
namespace: security
baseUri: "https://security.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.security_token"
resources:
- name: vulns
path: "/prioritize"
operations:
- name: prioritize
method: POST
- type: http
namespace: jira
baseUri: "https://fidelity.com.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
Fetches approved sales content from Seismic for a given product category, personalizes the delivery via Salesforce contact data, and sends via Microsoft Outlook to the prospect.
naftiko: "0.5"
info:
label: "Seismic Sales Content Delivery"
description: "Fetches approved sales content from Seismic for a given product category, personalizes the delivery via Salesforce contact data, and sends via Microsoft Outlook to the prospect."
tags:
- sales
- marketing
- seismic
- salesforce
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: sales-content
port: 8080
tools:
- name: deliver-sales-content
description: "Find and deliver personalized sales content from Seismic to a prospect."
inputParameters:
- name: product_category
in: body
type: string
description: "Product category (retirement, wealth, brokerage)."
- name: contact_id
in: body
type: string
description: "Salesforce contact ID."
steps:
- name: get-content
type: call
call: "seismic.search-content"
with:
category: "{{product_category}}"
status: "approved"
- name: get-contact
type: call
call: "salesforce.get-contact"
with:
contact_id: "{{contact_id}}"
- name: send-content
type: call
call: "outlook.send-email"
with:
to: "{{get-contact.Email}}"
subject: "Fidelity {{product_category}} Solutions for {{get-contact.Account.Name}}"
body: "Dear {{get-contact.FirstName}}, please find our latest {{product_category}} materials: {{get-content.content_link}}"
consumes:
- type: http
namespace: seismic
baseUri: "https://api.seismic.com/v2"
authentication:
type: bearer
token: "$secrets.seismic_token"
resources:
- name: content
path: "/content?category={{category}}&status={{status}}"
inputParameters:
- name: category
in: query
- name: status
in: query
operations:
- name: search-content
method: GET
- type: http
namespace: salesforce
baseUri: "https://fidelity.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/sobjects/Contact/{{contact_id}}"
inputParameters:
- name: contact_id
in: path
operations:
- name: get-contact
method: GET
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: send-mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Checks IT incident in ServiceNow for Fidelity.
naftiko: "0.5"
info:
label: "ServiceNow Incident Detail Check"
description: "Checks IT incident in ServiceNow for Fidelity."
tags:
- it-service
- servicenow
- incident-management
capability:
exposes:
- type: mcp
namespace: snow-incident
port: 8080
tools:
- name: check-incident
description: "Check incident at Fidelity."
inputParameters:
- name: incident_number
in: body
type: string
description: "Incident number."
call: "servicenow.get-incident"
with:
number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
consumes:
- type: http
namespace: servicenow
baseUri: "https://fidelity.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: get-incident
method: GET
Retrieves SharePoint metadata at Fidelity.
naftiko: "0.5"
info:
label: "SharePoint File Metadata"
description: "Retrieves SharePoint metadata at Fidelity."
tags:
- document-management
- sharepoint
- collaboration
capability:
exposes:
- type: mcp
namespace: sp-docs
port: 8080
tools:
- name: get-file
description: "Look up file at Fidelity."
inputParameters:
- name: site_id
in: body
type: string
description: "Site ID."
- name: file_path
in: body
type: string
description: "Path."
call: "sharepoint.get-file"
with:
site_id: "{{site_id}}"
path: "{{file_path}}"
outputParameters:
- name: name
type: string
mapping: "$.name"
- name: size
type: number
mapping: "$.size"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.microsoft_graph_token"
resources:
- name: files
path: "/sites/{{site_id}}/drive/root:/{{path}}"
inputParameters:
- name: site_id
in: path
- name: path
in: path
operations:
- name: get-file
method: GET
Retrieves the latest net asset value for a fund from SimCorp Dimension, returning NAV, shares outstanding, and valuation date.
naftiko: "0.5"
info:
label: "SimCorp Dimension NAV Lookup"
description: "Retrieves the latest net asset value for a fund from SimCorp Dimension, returning NAV, shares outstanding, and valuation date."
tags:
- fund-accounting
- portfolio-management
- simcorp-dimension
capability:
exposes:
- type: mcp
namespace: fund-valuation
port: 8080
tools:
- name: get-fund-nav
description: "Get current NAV for a fund from SimCorp Dimension by fund code."
inputParameters:
- name: fund_code
in: body
type: string
description: "The SimCorp fund identifier."
call: "simcorp.get-nav"
with:
fund_code: "{{fund_code}}"
consumes:
- type: http
namespace: simcorp
baseUri: "https://simcorp.fidelity.com/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: funds
path: "/funds/{{fund_code}}/nav"
inputParameters:
- name: fund_code
in: path
operations:
- name: get-nav
method: GET
Monitors SLAs at Fidelity via Datadog and Slack.
naftiko: "0.5"
info:
label: "SLA Monitoring Pipeline"
description: "Monitors SLAs at Fidelity via Datadog and Slack."
tags:
- operations
- sla
- datadog
- slack
capability:
exposes:
- type: mcp
namespace: sla-monitor
port: 8080
tools:
- name: check-sla
description: "Monitor SLAs at Fidelity."
inputParameters:
- name: service
in: body
type: string
description: "Service."
- name: target
in: body
type: number
description: "SLA target %."
steps:
- name: metrics
type: call
call: "datadog.get-sla"
with:
service: "{{service}}"
- name: check
type: call
call: "analytics.check-sla"
with:
uptime: "{{metrics.uptime}}"
target: "{{target}}"
- name: alert
type: call
call: "slack.post-message"
with:
channel: "#ops"
text: "SLA: {{service}} at {{metrics.uptime}}% (target: {{target}}%)"
- name: log
type: call
call: "servicenow.create-incident"
with:
desc: "SLA breach: {{service}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v2"
authentication:
type: bearer
token: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/metrics"
operations:
- name: get-sla
method: GET
- type: http
namespace: slack
baseUri: "https://slack.com/api"
authentication:
type: bearer
token: "$secrets.slack_token"
resources:
- name: messages
path: "/chat.postMessage"
operations:
- name: post-message
method: POST
- type: http
namespace: servicenow
baseUri: "https://fidelity.com.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
Executes a parameterized query against a Snowflake warehouse to retrieve aggregate trade volumes by date range and instrument type.
naftiko: "0.5"
info:
label: "Snowflake Trade Volume Query"
description: "Executes a parameterized query against a Snowflake warehouse to retrieve aggregate trade volumes by date range and instrument type."
tags:
- trading
- data
- snowflake
capability:
exposes:
- type: mcp
namespace: trade-analytics
port: 8080
tools:
- name: query-trade-volumes
description: "Run a trade volume query on Snowflake by date range and instrument type."
inputParameters:
- name: start_date
in: body
type: string
description: "Start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "End date in YYYY-MM-DD format."
- name: instrument_type
in: body
type: string
description: "Instrument type (equity, fixed_income, options, etf)."
call: "snowflake.execute-query"
with:
statement: "SELECT instrument_type, COUNT(*) as trade_count, SUM(notional) as total_notional FROM trades WHERE trade_date BETWEEN '{{start_date}}' AND '{{end_date}}' AND instrument_type = '{{instrument_type}}' GROUP BY instrument_type"
consumes:
- type: http
namespace: snowflake
baseUri: "https://fidelity.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
Searches Splunk for compliance-related log events within a time window, then archives the results to Amazon S3 for long-term regulatory retention.
naftiko: "0.5"
info:
label: "Splunk Compliance Log Search and Archive"
description: "Searches Splunk for compliance-related log events within a time window, then archives the results to Amazon S3 for long-term regulatory retention."
tags:
- compliance
- security
- splunk
- amazon-s3
capability:
exposes:
- type: mcp
namespace: compliance-search
port: 8080
tools:
- name: search-and-archive-compliance-logs
description: "Search Splunk for compliance log events and archive results to S3."
inputParameters:
- name: search_query
in: body
type: string
description: "Splunk search query string."
- name: earliest_time
in: body
type: string
description: "Earliest time for search (e.g., -24h)."
- name: archive_bucket
in: body
type: string
description: "S3 bucket for archiving results."
steps:
- name: run-search
type: call
call: "splunk.create-search"
with:
search: "{{search_query}}"
earliest_time: "{{earliest_time}}"
- name: archive-results
type: call
call: "s3.put-object"
with:
bucket: "{{archive_bucket}}"
key: "compliance-logs/{{run-search.sid}}/results.json"
content: "{{run-search.results}}"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.fidelity.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search-jobs
path: "/search/jobs"
operations:
- name: create-search
method: POST
- type: http
namespace: s3
baseUri: "https://s3.us-east-1.amazonaws.com"
authentication:
type: aws-sigv4
key: "$secrets.aws_access_key"
resources:
- name: objects
path: "/{{bucket}}/{{key}}"
inputParameters:
- name: bucket
in: path
- name: key
in: path
operations:
- name: put-object
method: PUT
Searches Splunk at Fidelity.
naftiko: "0.5"
info:
label: "Splunk Log Search"
description: "Searches Splunk at Fidelity."
tags:
- security
- splunk
- logging
capability:
exposes:
- type: mcp
namespace: splunk-search
port: 8080
tools:
- name: search-logs
description: "Search logs at Fidelity."
inputParameters:
- name: query
in: body
type: string
description: "SPL query."
call: "splunk.search"
with:
query: "{{query}}"
outputParameters:
- name: count
type: number
mapping: "$.results.count"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.fidelity.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search
path: "/search/jobs"
operations:
- name: search
method: POST
Retrieves Teams activity at Fidelity.
naftiko: "0.5"
info:
label: "Teams Channel Activity"
description: "Retrieves Teams activity at Fidelity."
tags:
- communications
- microsoft-teams
- analytics
capability:
exposes:
- type: mcp
namespace: teams-activity
port: 8080
tools:
- name: get-activity
description: "Check Teams activity at Fidelity."
inputParameters:
- name: team_id
in: body
type: string
description: "Team ID."
- name: channel_id
in: body
type: string
description: "Channel ID."
call: "teams.get-messages"
with:
team_id: "{{team_id}}"
channel_id: "{{channel_id}}"
outputParameters:
- name: count
type: number
mapping: "$.value.length"
consumes:
- type: http
namespace: teams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.microsoft_graph_token"
resources:
- name: messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: team_id
in: path
- name: channel_id
in: path
operations:
- name: get-messages
method: GET
Triggers a Terraform plan and apply via Azure DevOps pipeline for trading infrastructure changes, with approval gating and Datadog monitoring validation.
naftiko: "0.5"
info:
label: "Terraform Infrastructure Deployment"
description: "Triggers a Terraform plan and apply via Azure DevOps pipeline for trading infrastructure changes, with approval gating and Datadog monitoring validation."
tags:
- infrastructure
- deployment
- azure-devops
- datadog
capability:
exposes:
- type: mcp
namespace: infra-deploy
port: 8080
tools:
- name: deploy-infrastructure
description: "Trigger a Terraform deployment pipeline in Azure DevOps and validate via Datadog."
inputParameters:
- name: pipeline_id
in: body
type: string
description: "Azure DevOps pipeline ID."
- name: environment
in: body
type: string
description: "Target environment (staging, production)."
- name: terraform_workspace
in: body
type: string
description: "Terraform workspace name."
steps:
- name: trigger-pipeline
type: call
call: "azdevops.run-pipeline"
with:
pipeline_id: "{{pipeline_id}}"
parameters: "{\"environment\": \"{{environment}}\", \"workspace\": \"{{terraform_workspace}}\"}"
- name: verify-health
type: call
call: "datadog.check-monitors"
with:
tag_group: "env:{{environment}}"
consumes:
- type: http
namespace: azdevops
baseUri: "https://dev.azure.com/fidelity/_apis"
authentication:
type: basic
username: "$secrets.azdevops_user"
password: "$secrets.azdevops_pat"
resources:
- name: pipelines
path: "/pipelines/{{pipeline_id}}/runs?api-version=7.1"
inputParameters:
- name: pipeline_id
in: path
operations:
- name: run-pipeline
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/search?query=tag:{{tag_group}}"
inputParameters:
- name: tag_group
in: query
operations:
- name: check-monitors
method: GET
Checks Terraform workspace at Fidelity.
naftiko: "0.5"
info:
label: "Terraform Workspace Check"
description: "Checks Terraform workspace at Fidelity."
tags:
- infrastructure
- terraform
- iac
capability:
exposes:
- type: mcp
namespace: tf-ws
port: 8080
tools:
- name: check-ws
description: "Check workspace at Fidelity."
inputParameters:
- name: workspace_id
in: body
type: string
description: "Workspace ID."
call: "terraform.get-ws"
with:
workspace_id: "{{workspace_id}}"
outputParameters:
- name: name
type: string
mapping: "$.data.attributes.name"
consumes:
- type: http
namespace: terraform
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: workspaces
path: "/workspaces/{{workspace_id}}"
inputParameters:
- name: workspace_id
in: path
operations:
- name: get-ws
method: GET
Submits a trade order via Bloomberg AIM, runs a pre-trade compliance check against internal rules in Snowflake, and logs the result in ServiceNow for audit.
naftiko: "0.5"
info:
label: "Trade Execution and Compliance Check"
description: "Submits a trade order via Bloomberg AIM, runs a pre-trade compliance check against internal rules in Snowflake, and logs the result in ServiceNow for audit."
tags:
- trading
- compliance
- bloomberg-aim
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: trade-compliance
port: 8080
tools:
- name: execute-compliant-trade
description: "Submit a trade through Bloomberg AIM with pre-trade compliance validation and audit logging."
inputParameters:
- name: portfolio_id
in: body
type: string
description: "Portfolio identifier."
- name: ticker
in: body
type: string
description: "Security ticker symbol."
- name: side
in: body
type: string
description: "BUY or SELL."
- name: quantity
in: body
type: integer
description: "Number of shares."
- name: trader_id
in: body
type: string
description: "Trader employee ID."
steps:
- name: compliance-check
type: call
call: "snowflake.run-compliance-query"
with:
statement: "SELECT check_trade_limits('{{portfolio_id}}', '{{ticker}}', '{{side}}', {{quantity}}) as compliant"
- name: submit-order
type: call
call: "aim.create-order"
with:
portfolio: "{{portfolio_id}}"
security: "{{ticker}}"
side: "{{side}}"
quantity: "{{quantity}}"
- name: log-audit
type: call
call: "servicenow.create-record"
with:
table: "u_trade_audit"
short_description: "Trade {{side}} {{quantity}} {{ticker}} for portfolio {{portfolio_id}}"
trader: "{{trader_id}}"
compliance_result: "{{compliance-check.compliant}}"
order_id: "{{submit-order.order_id}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://fidelity.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-compliance-query
method: POST
- type: http
namespace: aim
baseUri: "https://aim.bloomberg.com/api/v1"
authentication:
type: bearer
token: "$secrets.bloomberg_aim_token"
resources:
- name: orders
path: "/orders"
operations:
- name: create-order
method: POST
- type: http
namespace: servicenow
baseUri: "https://fidelity.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tables
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Reconciles trade settlements by comparing SimCorp Dimension records with Snowflake clearing data, flags discrepancies in Salesforce, and notifies operations via Microsoft Teams.
naftiko: "0.5"
info:
label: "Trade Settlement Reconciliation"
description: "Reconciles trade settlements by comparing SimCorp Dimension records with Snowflake clearing data, flags discrepancies in Salesforce, and notifies operations via Microsoft Teams."
tags:
- operations
- settlements
- simcorp-dimension
- snowflake
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: settlement-recon
port: 8080
tools:
- name: reconcile-settlements
description: "Run trade settlement reconciliation across booking and clearing systems."
inputParameters:
- name: settlement_date
in: body
type: string
description: "Settlement date in YYYY-MM-DD format."
- name: ops_channel
in: body
type: string
description: "Microsoft Teams channel for operations notifications."
steps:
- name: get-booked-trades
type: call
call: "simcorp.get-settlements"
with:
settlement_date: "{{settlement_date}}"
- name: get-cleared-trades
type: call
call: "snowflake.execute-query"
with:
statement: "SELECT * FROM clearing.settled_trades WHERE settlement_date = '{{settlement_date}}'"
- name: run-recon
type: call
call: "snowflake.execute-recon"
with:
statement: "CALL run_settlement_reconciliation('{{settlement_date}}')"
- name: flag-breaks
type: call
call: "salesforce.create-case"
with:
subject: "Settlement Breaks: {{settlement_date}} - {{run-recon.break_count}} discrepancies"
type: "Operations"
priority: "High"
description: "{{run-recon.break_summary}}"
- name: notify-ops
type: call
call: "msteams.post-channel"
with:
channel_id: "{{ops_channel}}"
text: "Settlement recon for {{settlement_date}}: {{run-recon.matched_count}} matched, {{run-recon.break_count}} breaks. Case: {{flag-breaks.CaseNumber}}"
consumes:
- type: http
namespace: simcorp
baseUri: "https://simcorp.fidelity.com/api/v2"
authentication:
type: bearer
token: "$secrets.simcorp_token"
resources:
- name: settlements
path: "/settlements?date={{settlement_date}}"
inputParameters:
- name: settlement_date
in: query
operations:
- name: get-settlements
method: GET
- type: http
namespace: snowflake
baseUri: "https://fidelity.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- name: execute-recon
method: POST
- type: http
namespace: salesforce
baseUri: "https://fidelity.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: cases
path: "/sobjects/Case"
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/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: post-channel
method: POST
Retrieves a real-time quote for a fixed income security from Tradeweb, returning price, yield, spread, and dealer count.
naftiko: "0.5"
info:
label: "Tradeweb Fixed Income Quote"
description: "Retrieves a real-time quote for a fixed income security from Tradeweb, returning price, yield, spread, and dealer count."
tags:
- trading
- fixed-income
- tradeweb
capability:
exposes:
- type: mcp
namespace: fi-trading
port: 8080
tools:
- name: get-fi-quote
description: "Fetch a real-time fixed income quote from Tradeweb by CUSIP."
inputParameters:
- name: cusip
in: body
type: string
description: "CUSIP identifier for the bond."
call: "tradeweb.get-quote"
with:
cusip: "{{cusip}}"
consumes:
- type: http
namespace: tradeweb
baseUri: "https://api.tradeweb.com/v2"
authentication:
type: bearer
token: "$secrets.tradeweb_token"
resources:
- name: quotes
path: "/quotes/{{cusip}}"
inputParameters:
- name: cusip
in: path
operations:
- name: get-quote
method: GET
When a Datadog alert fires for trading infrastructure, creates a ServiceNow P1 incident, pages the on-call engineer via Microsoft Teams, and captures a Splunk log snapshot for investigation.
naftiko: "0.5"
info:
label: "Trading Platform Incident Response"
description: "When a Datadog alert fires for trading infrastructure, creates a ServiceNow P1 incident, pages the on-call engineer via Microsoft Teams, and captures a Splunk log snapshot for investigation."
tags:
- operations
- incident-response
- datadog
- servicenow
- microsoft-teams
- splunk
capability:
exposes:
- type: mcp
namespace: trading-incident
port: 8080
tools:
- name: handle-trading-alert
description: "Orchestrate incident response for a trading platform alert across monitoring, ITSM, and communication systems."
inputParameters:
- name: alert_id
in: body
type: string
description: "Datadog alert ID."
- name: service_name
in: body
type: string
description: "Affected trading service name."
- name: oncall_email
in: body
type: string
description: "On-call engineer email."
steps:
- name: get-alert-details
type: call
call: "datadog.get-monitor"
with:
monitor_id: "{{alert_id}}"
- name: create-p1-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "P1 Trading Alert: {{service_name}} - {{get-alert-details.name}}"
urgency: "1"
impact: "1"
category: "trading_infrastructure"
description: "Datadog alert {{alert_id}} triggered for {{service_name}}. Message: {{get-alert-details.message}}"
- name: capture-logs
type: call
call: "splunk.create-search"
with:
search: "index=trading service={{service_name}} level=ERROR earliest=-15m"
- name: page-oncall
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{oncall_email}}"
text: "P1 ALERT: {{service_name}} is degraded. Incident: {{create-p1-incident.number}}. Datadog: {{get-alert-details.name}}. Splunk job: {{capture-logs.sid}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: monitors
path: "/monitor/{{monitor_id}}"
inputParameters:
- name: monitor_id
in: path
operations:
- name: get-monitor
method: GET
- type: http
namespace: servicenow
baseUri: "https://fidelity.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: splunk
baseUri: "https://splunk.fidelity.com:8089/services"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search-jobs
path: "/search/jobs"
operations:
- name: create-search
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chat-messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
Checks Vault secret at Fidelity.
naftiko: "0.5"
info:
label: "Vault Secret Metadata"
description: "Checks Vault secret at Fidelity."
tags:
- security
- vault
- secrets-management
capability:
exposes:
- type: mcp
namespace: vault
port: 8080
tools:
- name: check-secret
description: "Check secret at Fidelity."
inputParameters:
- name: path
in: body
type: string
description: "Secret path."
call: "vault.get-metadata"
with:
path: "{{path}}"
outputParameters:
- name: version
type: number
mapping: "$.data.current_version"
consumes:
- type: http
namespace: vault
baseUri: "https://vault.fidelity.com/v1"
authentication:
type: bearer
token: "$secrets.vault_token"
resources:
- name: secrets
path: "/secret/metadata/{{path}}"
inputParameters:
- name: path
in: path
operations:
- name: get-metadata
method: GET
Rotates a secret in HashiCorp Vault and updates the corresponding Azure Key Vault entry, used for credential lifecycle management in trading systems.
naftiko: "0.5"
info:
label: "Vault Secret Rotation"
description: "Rotates a secret in HashiCorp Vault and updates the corresponding Azure Key Vault entry, used for credential lifecycle management in trading systems."
tags:
- security
- infrastructure
- hashicorp-vault
capability:
exposes:
- type: mcp
namespace: secret-mgmt
port: 8080
tools:
- name: rotate-secret
description: "Rotate a secret in HashiCorp Vault and sync to Azure Key Vault."
inputParameters:
- name: secret_path
in: body
type: string
description: "Vault secret path."
- name: secret_value
in: body
type: string
description: "New secret value."
steps:
- name: write-vault
type: call
call: "vault.write-secret"
with:
path: "{{secret_path}}"
value: "{{secret_value}}"
- name: sync-azure
type: call
call: "azkv.set-secret"
with:
secret_name: "{{secret_path}}"
value: "{{secret_value}}"
consumes:
- type: http
namespace: vault
baseUri: "https://vault.fidelity.com/v1"
authentication:
type: bearer
token: "$secrets.vault_token"
resources:
- name: secrets
path: "/secret/data/{{path}}"
inputParameters:
- name: path
in: path
operations:
- name: write-secret
method: POST
- type: http
namespace: azkv
baseUri: "https://fidelity-kv.vault.azure.net"
authentication:
type: bearer
token: "$secrets.azure_kv_token"
resources:
- name: secrets
path: "/secrets/{{secret_name}}?api-version=7.4"
inputParameters:
- name: secret_name
in: path
operations:
- name: set-secret
method: PUT
Processes invoices at Fidelity via OCR, SAP matching, approval, and Oracle recording.
naftiko: "0.5"
info:
label: "Vendor Invoice Processing Pipeline"
description: "Processes invoices at Fidelity via OCR, SAP matching, approval, and Oracle recording."
tags:
- finance
- accounts-payable
- sap
- oracle
capability:
exposes:
- type: mcp
namespace: invoice-proc
port: 8080
tools:
- name: process-invoice
description: "Process invoices at Fidelity."
inputParameters:
- name: invoice_id
in: body
type: string
description: "Invoice ID."
- name: vendor_id
in: body
type: string
description: "Vendor ID."
steps:
- name: extract
type: call
call: "ocr.extract"
with:
doc: "{{invoice_id}}"
- name: match
type: call
call: "sap.match-po"
with:
vendor: "{{vendor_id}}"
amount: "{{extract.total}}"
- name: approve
type: call
call: "workflow.submit"
with:
invoice: "{{invoice_id}}"
- name: record
type: call
call: "oracle.create-payment"
with:
invoice: "{{invoice_id}}"
consumes:
- type: http
namespace: ocr
baseUri: "https://ocr.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.ocr_token"
resources:
- name: invoices
path: "/extract"
operations:
- name: extract
method: POST
- type: http
namespace: sap
baseUri: "https://sap.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.sap_token"
resources:
- name: pos
path: "/match"
operations:
- name: match-po
method: POST
- type: http
namespace: workflow
baseUri: "https://workflow.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.workflow_token"
resources:
- name: approvals
path: "/submit"
operations:
- name: submit
method: POST
- type: http
namespace: oracle
baseUri: "https://oracle.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: payments
path: "/payments"
operations:
- name: create-payment
method: POST
Reviews vendors at Fidelity.
naftiko: "0.5"
info:
label: "Quarterly Vendor Review Pipeline"
description: "Reviews vendors at Fidelity."
tags:
- procurement
- vendor-management
- review
capability:
exposes:
- type: mcp
namespace: vendor-review
port: 8080
tools:
- name: review-vendor
description: "Review vendors at Fidelity."
inputParameters:
- name: vendor_id
in: body
type: string
description: "Vendor ID."
- name: quarter
in: body
type: string
description: "Quarter."
steps:
- name: perf
type: call
call: "procurement.get-metrics"
with:
vendor: "{{vendor_id}}"
q: "{{quarter}}"
- name: scorecard
type: call
call: "analytics.scorecard"
with:
data: "{{perf.data}}"
- name: invite
type: call
call: "email.send"
with:
to: "{{perf.contact}}"
subject: "QBR - {{quarter}}"
- name: schedule
type: call
call: "calendar.create-event"
with:
title: "QBR - {{perf.name}}"
consumes:
- type: http
namespace: procurement
baseUri: "https://procurement.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.procurement_token"
resources:
- name: vendors
path: "/vendors/{{vendor}}/metrics"
inputParameters:
- name: vendor
in: path
operations:
- name: get-metrics
method: GET
- type: http
namespace: analytics
baseUri: "https://analytics.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: scorecards
path: "/compute"
operations:
- name: scorecard
method: POST
- type: http
namespace: email
baseUri: "https://email.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.email_token"
resources:
- name: messages
path: "/send"
operations:
- name: send
method: POST
- type: http
namespace: calendar
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.microsoft_graph_token"
resources:
- name: events
path: "/users/proc/events"
operations:
- name: create-event
method: POST
Processes an account transfer (ACAT) by creating the transfer request in Salesforce, submitting to the clearing system via Snowflake, notifying the receiving advisor via Microsoft Teams, and logging the transfer in ServiceNow.
naftiko: "0.5"
info:
label: "Wealth Transfer Request Pipeline"
description: "Processes an account transfer (ACAT) by creating the transfer request in Salesforce, submitting to the clearing system via Snowflake, notifying the receiving advisor via Microsoft Teams, and logging the transfer in ServiceNow."
tags:
- wealth-management
- operations
- salesforce
- snowflake
- microsoft-teams
- servicenow
capability:
exposes:
- type: mcp
namespace: wealth-transfer
port: 8080
tools:
- name: process-account-transfer
description: "Orchestrate an ACAT account transfer across CRM, clearing, notification, and audit systems."
inputParameters:
- name: source_account
in: body
type: string
description: "Source account number."
- name: destination_account
in: body
type: string
description: "Destination account number."
- name: transfer_type
in: body
type: string
description: "Transfer type (full, partial)."
- name: receiving_advisor_email
in: body
type: string
description: "Receiving advisor email."
steps:
- name: create-transfer-request
type: call
call: "salesforce.create-transfer"
with:
source: "{{source_account}}"
destination: "{{destination_account}}"
type: "{{transfer_type}}"
- name: submit-to-clearing
type: call
call: "snowflake.execute-query"
with:
statement: "CALL submit_acat_transfer('{{source_account}}', '{{destination_account}}', '{{transfer_type}}', '{{create-transfer-request.transfer_id}}')"
- name: notify-advisor
type: call
call: "msteams.send-message"
with:
recipient_upn: "{{receiving_advisor_email}}"
text: "ACAT Transfer initiated: {{transfer_type}} transfer from {{source_account}} to {{destination_account}}. Transfer ID: {{create-transfer-request.transfer_id}}. Estimated completion: {{submit-to-clearing.estimated_date}}"
- name: log-transfer
type: call
call: "servicenow.create-record"
with:
table: "u_account_transfers"
short_description: "ACAT Transfer: {{source_account}} to {{destination_account}}"
transfer_id: "{{create-transfer-request.transfer_id}}"
status: "submitted"
consumes:
- type: http
namespace: salesforce
baseUri: "https://fidelity.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: transfers
path: "/sobjects/Account_Transfer__c"
operations:
- name: create-transfer
method: POST
- type: http
namespace: snowflake
baseUri: "https://fidelity.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-query
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: chat-messages
path: "/users/{{recipient_upn}}/sendMail"
inputParameters:
- name: recipient_upn
in: path
operations:
- name: send-message
method: POST
- type: http
namespace: servicenow
baseUri: "https://fidelity.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tables
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST
Retrieves employee profile from Workday for Fidelity.
naftiko: "0.5"
info:
label: "Workday Employee Profile Lookup"
description: "Retrieves employee profile from Workday for Fidelity."
tags:
- hr
- workday
- employee-directory
capability:
exposes:
- type: mcp
namespace: workday-profile
port: 8080
tools:
- name: get-employee-profile
description: "Look up Fidelity employee in Workday."
inputParameters:
- name: employee_id
in: body
type: string
description: "Employee ID."
call: "workday.get-worker"
with:
employee_id: "{{employee_id}}"
outputParameters:
- name: name
type: string
mapping: "$.worker.name"
- name: title
type: string
mapping: "$.worker.title"
consumes:
- type: http
namespace: workday
baseUri: "https://wd5.fidelity.com/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/workers/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-worker
method: GET
When a Zendesk ticket is created, enriches it with Salesforce client data, classifies the inquiry type, and routes to the appropriate team in ServiceNow.
naftiko: "0.5"
info:
label: "Zendesk Customer Inquiry Router"
description: "When a Zendesk ticket is created, enriches it with Salesforce client data, classifies the inquiry type, and routes to the appropriate team in ServiceNow."
tags:
- customer-service
- zendesk
- salesforce
- servicenow
capability:
exposes:
- type: mcp
namespace: inquiry-routing
port: 8080
tools:
- name: route-customer-inquiry
description: "Enrich and route a customer inquiry from Zendesk through Salesforce and ServiceNow."
inputParameters:
- name: zendesk_ticket_id
in: body
type: string
description: "Zendesk ticket ID."
steps:
- name: get-ticket
type: call
call: "zendesk.get-ticket"
with:
ticket_id: "{{zendesk_ticket_id}}"
- name: enrich-client
type: call
call: "salesforce.find-contact"
with:
email: "{{get-ticket.requester_email}}"
- name: create-service-request
type: call
call: "servicenow.create-record"
with:
table: "sc_request"
short_description: "{{get-ticket.subject}}"
description: "Client: {{enrich-client.Name}} ({{enrich-client.AccountType}}). Inquiry: {{get-ticket.description}}"
assigned_group: "{{get-ticket.category}}_team"
priority: "{{enrich-client.tier}}"
consumes:
- type: http
namespace: zendesk
baseUri: "https://fidelity.zendesk.com/api/v2"
authentication:
type: bearer
token: "$secrets.zendesk_token"
resources:
- name: tickets
path: "/tickets/{{ticket_id}}.json"
inputParameters:
- name: ticket_id
in: path
operations:
- name: get-ticket
method: GET
- type: http
namespace: salesforce
baseUri: "https://fidelity.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/query/?q=SELECT+Id,Name,Account.Name,Account.Type+FROM+Contact+WHERE+Email='{{email}}'"
inputParameters:
- name: email
in: query
operations:
- name: find-contact
method: GET
- type: http
namespace: servicenow
baseUri: "https://fidelity.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tables
path: "/table/{{table}}"
inputParameters:
- name: table
in: path
operations:
- name: create-record
method: POST