Goldman Sachs Capabilities
Naftiko 0.5 capability definitions for Goldman Sachs - 100 capabilities showing integration workflows and service orchestrations.
Uses Anthropic to summarize compliance and regulatory documents stored in Microsoft SharePoint and distributes the summary to the compliance team in Teams.
naftiko: "0.5"
info:
label: "AI-Assisted Regulatory Document Summary"
description: "Uses Anthropic to summarize compliance and regulatory documents stored in Microsoft SharePoint and distributes the summary to the compliance team in Teams."
tags:
- regulatory
- compliance
- anthropic
- microsoft-teams
- ai
- document-management
capability:
exposes:
- type: mcp
namespace: compliance-ai
port: 8080
tools:
- name: summarize-regulatory-document
description: "Given a SharePoint document URL, retrieve the document content, generate a structured executive summary using Anthropic, and post it to the compliance Teams channel."
inputParameters:
- name: document_url
in: body
type: string
description: "The SharePoint document URL to retrieve and summarize."
- name: document_type
in: body
type: string
description: "The regulatory document type, e.g. SEC Filing, Compliance Policy, Risk Report."
steps:
- name: get-document
type: call
call: sharepoint.get-document-content
with:
document_url: "{{document_url}}"
- name: generate-summary
type: call
call: anthropic.summarize-document
with:
model: claude-opus-4-5
prompt: "Summarize this {{document_type}} for the Goldman Sachs compliance team, highlighting key obligations and action items: {{get-document.content}}"
- name: post-summary
type: call
call: msteams.post-compliance-summary
with:
channel: "compliance-regulatory"
text: "Regulatory document summary ({{document_type}}): {{generate-summary.summary}}"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: documents
path: "/sites/root/drive/root:{{document_url}}:/content"
inputParameters:
- name: document_url
in: path
operations:
- name: get-document-content
method: GET
- type: http
namespace: anthropic
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: summarize-document
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/compliance/channels/regulatory/messages"
operations:
- name: post-compliance-summary
method: POST
Monitors ECS service metrics in CloudWatch, adjusts desired count, and logs the scaling event in ServiceNow.
naftiko: "0.5"
info:
label: "Amazon ECS Service Scaling Pipeline"
description: "Monitors ECS service metrics in CloudWatch, adjusts desired count, and logs the scaling event in ServiceNow."
tags:
- infrastructure
- amazon-ecs
- cloudwatch
- servicenow
capability:
exposes:
- type: mcp
namespace: ecs-scaling
port: 8080
tools:
- name: scale-ecs-service
description: "Auto-scale an ECS service based on metrics and log the event."
inputParameters:
- name: cluster
in: body
type: string
description: "ECS cluster name."
- name: service
in: body
type: string
description: "ECS service name."
- name: desired_count
in: body
type: string
description: "Target task count."
steps:
- name: get-metrics
type: call
call: "cloudwatch-api.get-metric-data"
with:
metric: "CPUUtilization"
dimensions: "ClusterName={{cluster}},ServiceName={{service}}"
- name: scale-service
type: call
call: "ecs-api.update-service"
with:
cluster: "{{cluster}}"
service: "{{service}}"
desired_count: "{{desired_count}}"
- name: log-event
type: call
call: "servicenow-api.create-change"
with:
short_description: "ECS scaling: {{service}} to {{desired_count}}"
description: "Cluster: {{cluster}}. Current CPU: {{get-metrics.value}}%. New count: {{desired_count}}."
category: "auto_scaling"
consumes:
- type: http
namespace: cloudwatch-api
baseUri: "https://monitoring.us-east-1.amazonaws.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.aws_sig_v4"
placement: header
resources:
- name: metrics
path: "/?Action=GetMetricData"
operations:
- name: get-metric-data
method: POST
- type: http
namespace: ecs-api
baseUri: "https://ecs.us-east-1.amazonaws.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.aws_sig_v4"
placement: header
resources:
- name: services
path: "/?Action=UpdateService"
operations:
- name: update-service
method: POST
- type: http
namespace: servicenow-api
baseUri: "https://goldmansachs.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
Retrieves metadata for an object stored in an S3 bucket used for risk data archival.
naftiko: "0.5"
info:
label: "Amazon S3 Bucket Object Lookup"
description: "Retrieves metadata for an object stored in an S3 bucket used for risk data archival."
tags:
- storage
- amazon-s3
capability:
exposes:
- type: mcp
namespace: s3
port: 8080
tools:
- name: get-object-metadata
description: "Get metadata for an object in a given S3 bucket."
inputParameters:
- name: bucket
in: body
type: string
description: "S3 bucket name."
- name: key
in: body
type: string
description: "S3 object key."
call: "s3-api.head-object"
with:
bucket: "{{bucket}}"
key: "{{key}}"
consumes:
- type: http
namespace: s3-api
baseUri: "https://s3.us-east-1.amazonaws.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.aws_sig_v4"
placement: header
resources:
- name: objects
path: "/{{bucket}}/{{key}}"
inputParameters:
- name: bucket
in: path
- name: key
in: path
operations:
- name: head-object
method: HEAD
Monitors an ECS deployment via CloudWatch, triggers rollback on failure, and notifies the team through Microsoft Teams.
naftiko: "0.5"
info:
label: "AWS ECS Deployment Rollback Pipeline"
description: "Monitors an ECS deployment via CloudWatch, triggers rollback on failure, and notifies the team through Microsoft Teams."
tags:
- deployment
- amazon-ecs
- cloudwatch
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: ecs-rollback
port: 8080
tools:
- name: rollback-ecs-deployment
description: "Monitor an ECS deployment and roll back on failure."
inputParameters:
- name: cluster
in: body
type: string
description: "ECS cluster name."
- name: service
in: body
type: string
description: "ECS service name."
steps:
- name: check-health
type: call
call: "cloudwatch-api.get-metric-data"
with:
metric: "HealthyHostCount"
dimensions: "ClusterName={{cluster}},ServiceName={{service}}"
- name: trigger-rollback
type: call
call: "ecs-api.update-service"
with:
cluster: "{{cluster}}"
service: "{{service}}"
task_definition: "{{service}}:previous"
- name: notify-team
type: call
call: "msteams-api.post-message"
with:
team_id: "platform-team"
channel_id: "deployments"
message: "ECS rollback triggered for {{service}} in {{cluster}}. Health: {{check-health.value}}."
consumes:
- type: http
namespace: cloudwatch-api
baseUri: "https://monitoring.us-east-1.amazonaws.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.aws_sig_v4"
placement: header
resources:
- name: metrics
path: "/?Action=GetMetricData"
operations:
- name: get-metric-data
method: POST
- type: http
namespace: ecs-api
baseUri: "https://ecs.us-east-1.amazonaws.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.aws_sig_v4"
placement: header
resources:
- name: services
path: "/?Action=UpdateService"
operations:
- name: update-service
method: POST
- type: http
namespace: msteams-api
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_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: post-message
method: POST
Retrieves the Azure AD group memberships for a specified user principal name.
naftiko: "0.5"
info:
label: "Azure AD User Group Membership Lookup"
description: "Retrieves the Azure AD group memberships for a specified user principal name."
tags:
- security
- identity
- azure-ad
capability:
exposes:
- type: mcp
namespace: group-membership
port: 8080
tools:
- name: get-memberships
description: "Given a user principal name, return their Azure AD group memberships. Use when security teams need to audit user access."
inputParameters:
- name: user_upn
in: body
type: string
description: "The user principal name (email)."
call: "azure-ad.get-user-groups"
with:
user_upn: "{{user_upn}}"
outputParameters:
- name: group_count
type: integer
mapping: "$.value.length"
- name: groups
type: string
mapping: "$.value[*].displayName"
consumes:
- type: http
namespace: azure-ad
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.azure_ad_token"
resources:
- name: user-groups
path: "/users/{{user_upn}}/memberOf"
inputParameters:
- name: user_upn
in: path
operations:
- name: get-user-groups
method: GET
Checks the status of an Azure DevOps build pipeline run to confirm successful deployment artifacts.
naftiko: "0.5"
info:
label: "Azure DevOps Build Status Check"
description: "Checks the status of an Azure DevOps build pipeline run to confirm successful deployment artifacts."
tags:
- cicd
- azure-devops
capability:
exposes:
- type: mcp
namespace: azure-devops
port: 8080
tools:
- name: get-build-status
description: "Get the current status of an Azure DevOps build by ID."
inputParameters:
- name: build_id
in: body
type: string
description: "Azure DevOps build identifier."
call: "azdo-api.get-build"
with:
build_id: "{{build_id}}"
consumes:
- type: http
namespace: azdo-api
baseUri: "https://dev.azure.com/goldmansachs"
authentication:
type: basic
username: ""
password: "$secrets.azdo_pat"
resources:
- name: builds
path: "/_apis/build/builds/{{build_id}}"
inputParameters:
- name: build_id
in: path
operations:
- name: get-build
method: GET
Checks Azure Functions execution logs, identifies failures in Datadog, and creates ServiceNow incidents for degraded functions.
naftiko: "0.5"
info:
label: "Azure Functions Health Check Pipeline"
description: "Checks Azure Functions execution logs, identifies failures in Datadog, and creates ServiceNow incidents for degraded functions."
tags:
- serverless
- azure-functions
- datadog
- servicenow
capability:
exposes:
- type: mcp
namespace: azfunc-health
port: 8080
tools:
- name: check-functions-health
description: "Monitor Azure Functions health and alert on failures."
inputParameters:
- name: function_app
in: body
type: string
description: "Azure Function App name."
steps:
- name: get-logs
type: call
call: "azure-api.get-function-logs"
with:
function_app: "{{function_app}}"
- name: check-errors
type: call
call: "datadog-api.query-metrics"
with:
query: "azure.functions.errors{function_app:{{function_app}}}"
- name: create-incident
type: call
call: "servicenow-api.create-incident"
with:
short_description: "Azure Function degraded: {{function_app}}"
description: "Error count: {{check-errors.value}}. Last execution: {{get-logs.last_execution}}."
category: "serverless"
consumes:
- type: http
namespace: azure-api
baseUri: "https://management.azure.com/subscriptions"
authentication:
type: bearer
token: "$secrets.azure_management_token"
resources:
- name: functions
path: "/resourceGroups/gs-prod/providers/Microsoft.Web/sites/{{function_app}}/functions"
inputParameters:
- name: function_app
in: path
operations:
- name: get-function-logs
method: GET
- type: http
namespace: datadog-api
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: metrics
path: "/query"
operations:
- name: query-metrics
method: GET
- type: http
namespace: servicenow-api
baseUri: "https://goldmansachs.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
Provisions Azure resources via Terraform, configures monitoring in Datadog, and logs the deployment in ServiceNow as a change request.
naftiko: "0.5"
info:
label: "Azure Infrastructure Provisioning Pipeline"
description: "Provisions Azure resources via Terraform, configures monitoring in Datadog, and logs the deployment in ServiceNow as a change request."
tags:
- infrastructure
- microsoft-azure
- datadog
- servicenow
capability:
exposes:
- type: mcp
namespace: azure-provisioning
port: 8080
tools:
- name: provision-azure-infra
description: "Provision cloud infrastructure with monitoring and change tracking."
inputParameters:
- name: environment
in: body
type: string
description: "Target environment (dev/staging/prod)."
- name: resource_type
in: body
type: string
description: "Azure resource type to provision."
steps:
- name: apply-terraform
type: call
call: "terraform-api.create-run"
with:
workspace: "gs-{{environment}}"
message: "Provision {{resource_type}} in {{environment}}"
- name: setup-monitoring
type: call
call: "datadog-api.create-monitor"
with:
name: "{{resource_type}}-{{environment}}"
query: "avg(last_5m):avg:azure.{{resource_type}}.health{env:{{environment}}} < 1"
- name: log-change
type: call
call: "servicenow-api.create-change"
with:
short_description: "Azure provisioning: {{resource_type}} in {{environment}}"
description: "Terraform run: {{apply-terraform.id}}. Monitor: {{setup-monitoring.id}}."
category: "infrastructure"
consumes:
- type: http
namespace: terraform-api
baseUri: "https://app.terraform.io/api/v2"
authentication:
type: bearer
token: "$secrets.terraform_token"
resources:
- name: runs
path: "/workspaces/{{workspace}}/runs"
inputParameters:
- name: workspace
in: path
operations:
- name: create-run
method: POST
- type: http
namespace: datadog-api
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: monitors
path: "/monitor"
operations:
- name: create-monitor
method: POST
- type: http
namespace: servicenow-api
baseUri: "https://goldmansachs.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
Promotes a trained ML model from Azure ML staging to production, validates metrics in Datadog, and notifies stakeholders via Microsoft Teams.
naftiko: "0.5"
info:
label: "Azure Machine Learning Model Promotion"
description: "Promotes a trained ML model from Azure ML staging to production, validates metrics in Datadog, and notifies stakeholders via Microsoft Teams."
tags:
- ml-ops
- azure-machine-learning
- datadog
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: ml-promotion
port: 8080
tools:
- name: promote-ml-model
description: "Promote an ML model to production with validation and notification."
inputParameters:
- name: model_name
in: body
type: string
description: "Azure ML model name."
- name: version
in: body
type: string
description: "Model version to promote."
steps:
- name: promote-model
type: call
call: "azureml-api.promote-model"
with:
model_name: "{{model_name}}"
version: "{{version}}"
- name: validate-metrics
type: call
call: "datadog-api.query-metrics"
with:
query: "ml.model.accuracy{model:{{model_name}},version:{{version}}}"
- name: notify-team
type: call
call: "msteams-api.post-message"
with:
team_id: "data-science"
channel_id: "deployments"
message: "Model {{model_name}} v{{version}} promoted to production. Accuracy: {{validate-metrics.value}}."
consumes:
- type: http
namespace: azureml-api
baseUri: "https://ml.azure.com/api/v1"
authentication:
type: bearer
token: "$secrets.azure_ml_token"
resources:
- name: models
path: "/models/{{model_name}}/versions/{{version}}/promote"
inputParameters:
- name: model_name
in: path
- name: version
in: path
operations:
- name: promote-model
method: POST
- type: http
namespace: datadog-api
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: metrics
path: "/query"
operations:
- name: query-metrics
method: GET
- type: http
namespace: msteams-api
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_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: post-message
method: POST
Receives order instructions from Bloomberg AIM, validates against compliance rules in Snowflake, and routes to Tradeweb for execution.
naftiko: "0.5"
info:
label: "Bloomberg AIM Order Routing Pipeline"
description: "Receives order instructions from Bloomberg AIM, validates against compliance rules in Snowflake, and routes to Tradeweb for execution."
tags:
- trading
- bloomberg-aim
- snowflake
- tradeweb
capability:
exposes:
- type: mcp
namespace: aim-routing
port: 8080
tools:
- name: route-aim-order
description: "Validate and route a Bloomberg AIM order to Tradeweb."
inputParameters:
- name: order_id
in: body
type: string
description: "Bloomberg AIM order identifier."
steps:
- name: get-order
type: call
call: "aim-api.get-order"
with:
order_id: "{{order_id}}"
- name: check-compliance
type: call
call: "snowflake-api.run-query"
with:
query: "SELECT * FROM compliance.order_rules WHERE instrument = '{{get-order.instrument}}'"
- name: route-to-tradeweb
type: call
call: "tradeweb-api.submit-rfq"
with:
instrument: "{{get-order.instrument}}"
quantity: "{{get-order.quantity}}"
side: "{{get-order.side}}"
consumes:
- type: http
namespace: aim-api
baseUri: "https://api.bloomberg.com/aim/v1"
authentication:
type: bearer
token: "$secrets.bloomberg_aim_token"
resources:
- name: orders
path: "/orders/{{order_id}}"
inputParameters:
- name: order_id
in: path
operations:
- name: get-order
method: GET
- type: http
namespace: snowflake-api
baseUri: "https://goldmansachs.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: tradeweb-api
baseUri: "https://api.tradeweb.com/v1"
authentication:
type: bearer
token: "$secrets.tradeweb_token"
resources:
- name: rfqs
path: "/rfq"
operations:
- name: submit-rfq
method: POST
Pulls economic indicators from Bloomberg Economics, generates a summary, and distributes it via Confluence and Microsoft Outlook.
naftiko: "0.5"
info:
label: "Bloomberg Economics Briefing Generator"
description: "Pulls economic indicators from Bloomberg Economics, generates a summary, and distributes it via Confluence and Microsoft Outlook."
tags:
- research
- bloomberg-economics
- confluence
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: economics-briefing
port: 8080
tools:
- name: generate-economics-briefing
description: "Generate and distribute an economics briefing."
inputParameters:
- name: region
in: body
type: string
description: "Economic region (e.g. US, EU, APAC)."
- name: date
in: body
type: string
description: "Briefing date YYYY-MM-DD."
steps:
- name: get-indicators
type: call
call: "bloomberg-econ-api.get-indicators"
with:
region: "{{region}}"
date: "{{date}}"
- name: create-page
type: call
call: "confluence-api.create-page"
with:
space: "RESEARCH"
title: "Economics Briefing: {{region}} - {{date}}"
body: "GDP: {{get-indicators.gdp}}. CPI: {{get-indicators.cpi}}. Unemployment: {{get-indicators.unemployment}}."
- name: email-briefing
type: call
call: "outlook-api.send-mail"
with:
to: "research-distribution@goldmansachs.com"
subject: "Economics Briefing: {{region}} - {{date}}"
body: "The {{region}} economics briefing for {{date}} is available in Confluence."
consumes:
- type: http
namespace: bloomberg-econ-api
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: indicators
path: "/economics/{{region}}"
inputParameters:
- name: region
in: path
operations:
- name: get-indicators
method: GET
- type: http
namespace: confluence-api
baseUri: "https://goldmansachs.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_password"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: outlook-api
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-mail
method: POST
Retrieves real-time market data for a specified financial instrument from Bloomberg Enterprise Data.
naftiko: "0.5"
info:
label: "Bloomberg Market Data Lookup"
description: "Retrieves real-time market data for a specified financial instrument from Bloomberg Enterprise Data."
tags:
- trading
- market-data
- bloomberg
capability:
exposes:
- type: mcp
namespace: market-data
port: 8080
tools:
- name: get-market-data
description: "Given a Bloomberg ticker symbol, return the current price, volume, and change. Use when traders need real-time instrument pricing."
inputParameters:
- name: ticker
in: body
type: string
description: "The Bloomberg ticker symbol."
call: "bloomberg-api.get-quote"
with:
ticker: "{{ticker}}"
outputParameters:
- name: last_price
type: number
mapping: "$.data.last_price"
- name: volume
type: number
mapping: "$.data.volume"
- name: change_pct
type: number
mapping: "$.data.change_pct"
consumes:
- type: http
namespace: bloomberg-api
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: quotes
path: "/quotes/{{ticker}}"
inputParameters:
- name: ticker
in: path
operations:
- name: get-quote
method: GET
Extracts portfolio analytics from Bloomberg, calculates risk metrics in Snowflake, and publishes results to Power BI.
naftiko: "0.5"
info:
label: "Bloomberg Portfolio Analytics Pipeline"
description: "Extracts portfolio analytics from Bloomberg, calculates risk metrics in Snowflake, and publishes results to Power BI."
tags:
- portfolio-management
- bloomberg-enterprise-data
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: portfolio-analytics
port: 8080
tools:
- name: run-portfolio-analytics
description: "Generate portfolio analytics with risk metrics and visualizations."
inputParameters:
- name: portfolio_id
in: body
type: string
description: "Bloomberg portfolio identifier."
- name: as_of_date
in: body
type: string
description: "Valuation date YYYY-MM-DD."
steps:
- name: get-analytics
type: call
call: "bloomberg-api.get-portfolio-analytics"
with:
portfolio_id: "{{portfolio_id}}"
as_of_date: "{{as_of_date}}"
- name: calc-risk
type: call
call: "snowflake-api.run-query"
with:
query: "CALL risk.calculate_var('{{portfolio_id}}', '{{as_of_date}}')"
- name: refresh-dashboard
type: call
call: "powerbi-api.refresh-dataset"
with:
dataset_id: "portfolio-analytics"
consumes:
- type: http
namespace: bloomberg-api
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: portfolios
path: "/portfolios/{{portfolio_id}}/analytics"
inputParameters:
- name: portfolio_id
in: path
operations:
- name: get-portfolio-analytics
method: GET
- type: http
namespace: snowflake-api
baseUri: "https://goldmansachs.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: powerbi-api
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
Detects network anomalies from Cisco devices, creates a PagerDuty alert, and opens a ServiceNow change request for remediation.
naftiko: "0.5"
info:
label: "Cisco Network Incident Response Chain"
description: "Detects network anomalies from Cisco devices, creates a PagerDuty alert, and opens a ServiceNow change request for remediation."
tags:
- networking
- cisco
- pagerduty
- servicenow
capability:
exposes:
- type: mcp
namespace: network-incident
port: 8080
tools:
- name: respond-to-network-incident
description: "Detect and respond to Cisco network incidents."
inputParameters:
- name: device_id
in: body
type: string
description: "Cisco device identifier."
steps:
- name: get-status
type: call
call: "cisco-api.get-device-status"
with:
device_id: "{{device_id}}"
- name: alert-noc
type: call
call: "pagerduty-api.create-event"
with:
routing_key: "$secrets.pagerduty_routing_key"
summary: "Network incident: {{device_id}}. Status: {{get-status.health}}. Interface errors: {{get-status.error_count}}."
- name: open-change
type: call
call: "servicenow-api.create-change"
with:
short_description: "Network remediation: {{device_id}}"
description: "Device: {{device_id}}. Health: {{get-status.health}}. PagerDuty: {{alert-noc.dedup_key}}."
category: "network"
consumes:
- type: http
namespace: cisco-api
baseUri: "https://sandboxdnac.cisco.com/dna/intent/api/v1"
authentication:
type: bearer
token: "$secrets.cisco_dnac_token"
resources:
- name: devices
path: "/network-device/{{device_id}}"
inputParameters:
- name: device_id
in: path
operations:
- name: get-device-status
method: GET
- type: http
namespace: pagerduty-api
baseUri: "https://events.pagerduty.com/v2"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: events
path: "/enqueue"
operations:
- name: create-event
method: POST
- type: http
namespace: servicenow-api
baseUri: "https://goldmansachs.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
Pulls client account details from Salesforce, retrieves recent market data from Bloomberg, and prepares a briefing note in Confluence.
naftiko: "0.5"
info:
label: "Client Meeting Preparation Workflow"
description: "Pulls client account details from Salesforce, retrieves recent market data from Bloomberg, and prepares a briefing note in Confluence."
tags:
- relationship-management
- salesforce
- bloomberg-enterprise-data
- confluence
capability:
exposes:
- type: mcp
namespace: meeting-prep
port: 8080
tools:
- name: prepare-client-briefing
description: "Generate a client briefing note for an upcoming meeting."
inputParameters:
- name: client_id
in: body
type: string
description: "Salesforce account ID."
- name: meeting_date
in: body
type: string
description: "Meeting date YYYY-MM-DD."
steps:
- name: get-client
type: call
call: "salesforce-api.get-account"
with:
account_id: "{{client_id}}"
- name: market-data
type: call
call: "bloomberg-api.get-quote"
with:
ticker: "{{get-client.primary_ticker}}"
- name: create-note
type: call
call: "confluence-api.create-page"
with:
space: "CLIENT"
title: "Briefing: {{get-client.name}} - {{meeting_date}}"
body: "Client: {{get-client.name}}. AUM: {{get-client.aum}}. Market: {{market-data.last_price}} ({{market-data.change_pct}}%)."
consumes:
- type: http
namespace: salesforce-api
baseUri: "https://goldmansachs.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: bloomberg-api
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: quotes
path: "/quotes/{{ticker}}"
inputParameters:
- name: ticker
in: path
operations:
- name: get-quote
method: GET
- type: http
namespace: confluence-api
baseUri: "https://goldmansachs.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_password"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Fetches portfolio positions from FactSet, compares against target allocation in Snowflake, and creates rebalance orders via Salesforce.
naftiko: "0.5"
info:
label: "Client Portfolio Rebalancing Workflow"
description: "Fetches portfolio positions from FactSet, compares against target allocation in Snowflake, and creates rebalance orders via Salesforce."
tags:
- portfolio-management
- factset
- snowflake
- salesforce
capability:
exposes:
- type: mcp
namespace: portfolio-rebalance
port: 8080
tools:
- name: rebalance-portfolio
description: "Orchestrate portfolio rebalancing from analysis to order creation."
inputParameters:
- name: portfolio_id
in: body
type: string
description: "FactSet portfolio identifier."
- name: client_id
in: body
type: string
description: "Salesforce client ID."
steps:
- name: get-positions
type: call
call: "factset-api.get-holdings"
with:
portfolio_id: "{{portfolio_id}}"
- name: get-targets
type: call
call: "snowflake-api.run-query"
with:
query: "SELECT * FROM wealth.target_allocations WHERE portfolio_id = '{{portfolio_id}}'"
- name: create-orders
type: call
call: "salesforce-api.create-record"
with:
object: "Trade_Order__c"
data: "portfolio: {{portfolio_id}}, client: {{client_id}}, positions: {{get-positions.count}}, drift: {{get-targets.max_drift}}"
consumes:
- type: http
namespace: factset-api
baseUri: "https://api.factset.com/content/factset-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
- type: http
namespace: snowflake-api
baseUri: "https://goldmansachs.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: salesforce-api
baseUri: "https://goldmansachs.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: records
path: "/sobjects/{{object}}"
inputParameters:
- name: object
in: path
operations:
- name: create-record
method: POST
Pulls client data from Salesforce, runs credit checks via Bloomberg, and creates a risk assessment ticket in ServiceNow.
naftiko: "0.5"
info:
label: "Client Risk Assessment Orchestrator"
description: "Pulls client data from Salesforce, runs credit checks via Bloomberg, and creates a risk assessment ticket in ServiceNow."
tags:
- risk
- salesforce
- bloomberg-enterprise-data
- servicenow
capability:
exposes:
- type: mcp
namespace: client-risk
port: 8080
tools:
- name: assess-client-risk
description: "Orchestrate a full client risk assessment across CRM, market data, and ticketing."
inputParameters:
- name: client_id
in: body
type: string
description: "Salesforce client account ID."
steps:
- name: get-client
type: call
call: "salesforce-api.get-account"
with:
account_id: "{{client_id}}"
- name: credit-check
type: call
call: "bloomberg-api.get-credit-data"
with:
entity: "{{get-client.name}}"
- name: create-assessment
type: call
call: "servicenow-api.create-incident"
with:
short_description: "Risk assessment: {{get-client.name}}"
description: "Credit rating: {{credit-check.rating}}. Exposure: {{credit-check.exposure}}."
category: "risk_management"
consumes:
- type: http
namespace: salesforce-api
baseUri: "https://goldmansachs.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: accounts
path: "/sobjects/Account/{{account_id}}"
inputParameters:
- name: account_id
in: path
operations:
- name: get-account
method: GET
- type: http
namespace: bloomberg-api
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: credit
path: "/credit/{{entity}}"
inputParameters:
- name: entity
in: path
operations:
- name: get-credit-data
method: GET
- type: http
namespace: servicenow-api
baseUri: "https://goldmansachs.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
Retrieves DNS records from Cloudflare for a specified zone to verify domain configuration.
naftiko: "0.5"
info:
label: "Cloudflare DNS Record Lookup"
description: "Retrieves DNS records from Cloudflare for a specified zone to verify domain configuration."
tags:
- networking
- cloudflare
capability:
exposes:
- type: mcp
namespace: cloudflare
port: 8080
tools:
- name: get-dns-records
description: "List DNS records for a Cloudflare zone."
inputParameters:
- name: zone_id
in: body
type: string
description: "Cloudflare zone identifier."
call: "cloudflare-api.list-dns-records"
with:
zone_id: "{{zone_id}}"
consumes:
- type: http
namespace: cloudflare-api
baseUri: "https://api.cloudflare.com/client/v4"
authentication:
type: bearer
token: "$secrets.cloudflare_api_token"
resources:
- name: dns-records
path: "/zones/{{zone_id}}/dns_records"
inputParameters:
- name: zone_id
in: path
operations:
- name: list-dns-records
method: GET
Retrieves the current state of a CloudWatch alarm to determine if a trading infrastructure metric has breached its threshold.
naftiko: "0.5"
info:
label: "CloudWatch Metric Alarm Check"
description: "Retrieves the current state of a CloudWatch alarm to determine if a trading infrastructure metric has breached its threshold."
tags:
- monitoring
- cloudwatch
capability:
exposes:
- type: mcp
namespace: cloudwatch
port: 8080
tools:
- name: get-alarm-state
description: "Check whether a named CloudWatch alarm is in OK, ALARM, or INSUFFICIENT_DATA state."
inputParameters:
- name: alarm_name
in: body
type: string
description: "CloudWatch alarm name."
call: "aws-cloudwatch.describe-alarm"
with:
alarm_name: "{{alarm_name}}"
consumes:
- type: http
namespace: aws-cloudwatch
baseUri: "https://monitoring.us-east-1.amazonaws.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.aws_sig_v4"
placement: header
resources:
- name: alarms
path: "/?Action=DescribeAlarms&AlarmNames.member.1={{alarm_name}}"
inputParameters:
- name: alarm_name
in: query
operations:
- name: describe-alarm
method: GET
Checks employee training completion in Pluralsight, identifies overdue staff via Workday, and sends reminders through Microsoft Teams.
naftiko: "0.5"
info:
label: "Compliance Training Enforcement Workflow"
description: "Checks employee training completion in Pluralsight, identifies overdue staff via Workday, and sends reminders through Microsoft Teams."
tags:
- compliance
- pluralsight
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: compliance-training
port: 8080
tools:
- name: enforce-training-compliance
description: "Check training completion and notify overdue employees."
inputParameters:
- name: course_id
in: body
type: string
description: "Pluralsight course identifier."
- name: department
in: body
type: string
description: "Workday department code."
steps:
- name: check-completions
type: call
call: "pluralsight-api.get-completions"
with:
course_id: "{{course_id}}"
- name: get-staff
type: call
call: "workday-api.list-workers"
with:
department: "{{department}}"
- name: send-reminders
type: call
call: "msteams-api.post-message"
with:
team_id: "compliance-team"
channel_id: "training-reminders"
message: "Training reminder: {{check-completions.overdue_count}} employees in {{department}} have not completed {{course_id}}."
consumes:
- type: http
namespace: pluralsight-api
baseUri: "https://api.pluralsight.com/api/v1"
authentication:
type: bearer
token: "$secrets.pluralsight_token"
resources:
- name: completions
path: "/courses/{{course_id}}/completions"
inputParameters:
- name: course_id
in: path
operations:
- name: get-completions
method: GET
- type: http
namespace: workday-api
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/goldman-sachs/workers"
operations:
- name: list-workers
method: GET
- type: http
namespace: msteams-api
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_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: post-message
method: POST
Extracts resolved incidents from ServiceNow, generates knowledge articles in Confluence, and indexes them in SharePoint search.
naftiko: "0.5"
info:
label: "Confluence Knowledge Base Update Pipeline"
description: "Extracts resolved incidents from ServiceNow, generates knowledge articles in Confluence, and indexes them in SharePoint search."
tags:
- knowledge-management
- servicenow
- confluence
- sharepoint
capability:
exposes:
- type: mcp
namespace: kb-update
port: 8080
tools:
- name: update-knowledge-base
description: "Convert resolved incidents into knowledge base articles."
inputParameters:
- name: category
in: body
type: string
description: "Incident category to process."
- name: since_date
in: body
type: string
description: "Date to search from YYYY-MM-DD."
steps:
- name: get-resolved
type: call
call: "servicenow-api.list-incidents"
with:
category: "{{category}}"
state: "resolved"
since: "{{since_date}}"
- name: create-article
type: call
call: "confluence-api.create-page"
with:
space: "KB"
title: "KB: {{get-resolved.top.short_description}}"
body: "Resolution: {{get-resolved.top.resolution_notes}}. Category: {{category}}."
- name: index-article
type: call
call: "sharepoint-api.create-file"
with:
site_id: "knowledge-base"
path: "Articles/{{category}}/{{get-resolved.top.number}}.html"
consumes:
- type: http
namespace: servicenow-api
baseUri: "https://goldmansachs.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: list-incidents
method: GET
- type: http
namespace: confluence-api
baseUri: "https://goldmansachs.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_password"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
- type: http
namespace: sharepoint-api
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{path}}:/content"
inputParameters:
- name: site_id
in: path
- name: path
in: path
operations:
- name: create-file
method: PUT
Searches Confluence for regulatory policy documents matching a keyword query within the compliance knowledge base.
naftiko: "0.5"
info:
label: "Confluence Regulatory Policy Search"
description: "Searches Confluence for regulatory policy documents matching a keyword query within the compliance knowledge base."
tags:
- compliance
- documentation
- confluence
capability:
exposes:
- type: mcp
namespace: policy-search
port: 8080
tools:
- name: search-policy
description: "Given a keyword, search for matching regulatory policy pages in Confluence. Use when compliance officers need to find specific policy documentation."
inputParameters:
- name: keyword
in: body
type: string
description: "The search keyword."
call: "confluence-api.search-content"
with:
keyword: "{{keyword}}"
outputParameters:
- name: page_id
type: string
mapping: "$.results[0].id"
- name: title
type: string
mapping: "$.results[0].title"
- name: url
type: string
mapping: "$.results[0]._links.webui"
consumes:
- type: http
namespace: confluence-api
baseUri: "https://gs-engineering.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_token"
resources:
- name: content
path: "/content/search"
inputParameters:
- name: keyword
in: query
operations:
- name: search-content
method: GET
Runs data quality checks in Snowflake, sends alerts to PagerDuty on failures, and logs issues in Jira for data engineering follow-up.
naftiko: "0.5"
info:
label: "Data Quality Alerting Pipeline"
description: "Runs data quality checks in Snowflake, sends alerts to PagerDuty on failures, and logs issues in Jira for data engineering follow-up."
tags:
- data-quality
- snowflake
- pagerduty
- jira
capability:
exposes:
- type: mcp
namespace: data-quality
port: 8080
tools:
- name: run-data-quality-check
description: "Execute data quality validation and alert on failures."
inputParameters:
- name: dataset
in: body
type: string
description: "Snowflake dataset name."
- name: threshold
in: body
type: string
description: "Acceptable error threshold percentage."
steps:
- name: run-check
type: call
call: "snowflake-api.run-query"
with:
query: "SELECT COUNT(*) as errors FROM {{dataset}} WHERE is_valid = false"
- name: alert-oncall
type: call
call: "pagerduty-api.create-event"
with:
routing_key: "$secrets.pagerduty_routing_key"
summary: "Data quality failure: {{dataset}} has {{run-check.errors}} errors (threshold: {{threshold}}%)"
- name: log-issue
type: call
call: "jira-api.create-issue"
with:
project: "DATA"
summary: "Data quality: {{dataset}}"
description: "Errors: {{run-check.errors}}. Threshold: {{threshold}}%. PagerDuty incident: {{alert-oncall.dedup_key}}."
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://goldmansachs.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: pagerduty-api
baseUri: "https://events.pagerduty.com/v2"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: events
path: "/enqueue"
operations:
- name: create-event
method: POST
- type: http
namespace: jira-api
baseUri: "https://goldmansachs.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_password"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Detects cloud infrastructure cost anomalies in Datadog, opens a ServiceNow change request for remediation, and notifies the FinOps team in Teams.
naftiko: "0.5"
info:
label: "Datadog Cloud Cost Anomaly Response"
description: "Detects cloud infrastructure cost anomalies in Datadog, opens a ServiceNow change request for remediation, and notifies the FinOps team in Teams."
tags:
- cloud
- observability
- datadog
- servicenow
- cost-management
- finops
capability:
exposes:
- type: mcp
namespace: finops-ops
port: 8080
tools:
- name: respond-to-cost-anomaly
description: "Given a Datadog monitor ID flagging a cost anomaly, retrieve monitor details, open a ServiceNow change request, and alert the FinOps team in Teams."
inputParameters:
- name: monitor_id
in: body
type: string
description: "The Datadog monitor ID that detected the cost anomaly."
- name: resource_type
in: body
type: string
description: "The cloud resource type with the anomaly, e.g. EC2, S3, GKE."
steps:
- name: get-monitor
type: call
call: datadog.get-monitor
with:
monitor_id: "{{monitor_id}}"
- name: create-change
type: call
call: servicenow.create-change
with:
short_description: "Cost anomaly: {{resource_type}} — {{get-monitor.name}}"
category: cloud_cost
priority: "2"
- name: notify-finops
type: call
call: msteams.post-cost-alert
with:
channel: "cloud-finops"
text: "Cost anomaly on {{resource_type}}: {{get-monitor.name}}. Change: {{create-change.number}}"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
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://goldmansachs.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/finops/channels/general/messages"
operations:
- name: post-cost-alert
method: POST
Retrieves SLO compliance status from Datadog for all trading system services and posts a daily compliance digest to the technology operations team.
naftiko: "0.5"
info:
label: "Datadog Trading Infrastructure SLO Monitor"
description: "Retrieves SLO compliance status from Datadog for all trading system services and posts a daily compliance digest to the technology operations team."
tags:
- observability
- datadog
- microsoft-teams
- slo
- trading-infrastructure
capability:
exposes:
- type: mcp
namespace: slo-reporting
port: 8080
tools:
- name: digest-trading-slo-compliance
description: "Retrieve all SLO statuses for trading infrastructure services from Datadog and post a daily compliance report to the technology operations Teams channel."
inputParameters:
- name: timeframe
in: body
type: string
description: "SLO evaluation window: 7d, 30d, or 90d."
steps:
- name: get-slos
type: call
call: datadog.list-slos
with:
timeframe: "{{timeframe}}"
- name: post-report
type: call
call: msteams.post-slo-report
with:
channel: "tech-ops-slo"
text: "Trading SLO Report ({{timeframe}}): {{get-slos.compliant}} compliant, {{get-slos.breached}} breached."
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: slos
path: "/slo"
operations:
- name: list-slos
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/tech-ops/channels/slo/messages"
operations:
- name: post-slo-report
method: POST
Queries Datadog for the p99 latency of trading platform services over the last hour.
naftiko: "0.5"
info:
label: "Datadog Trading Platform Latency Check"
description: "Queries Datadog for the p99 latency of trading platform services over the last hour."
tags:
- monitoring
- trading
- datadog
capability:
exposes:
- type: mcp
namespace: trading-latency
port: 8080
tools:
- name: check-trading-latency
description: "Given a trading service name, return the p99 latency metric. Use when SREs need to verify trading platform performance meets SLAs."
inputParameters:
- name: service_name
in: body
type: string
description: "The Datadog service name for the trading platform."
call: "datadog-api.get-latency"
with:
service_name: "{{service_name}}"
outputParameters:
- name: p99_latency_ms
type: number
mapping: "$.series[0].pointlist[-1][1]"
- name: status
type: string
mapping: "$.status"
consumes:
- type: http
namespace: datadog-api
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "$secrets.datadog_api_key"
resources:
- name: metrics
path: "/query"
inputParameters:
- name: service_name
in: query
operations:
- name: get-latency
method: GET
Queries Dynatrace for real-time application performance metrics including response time and error rate.
naftiko: "0.5"
info:
label: "Dynatrace Application Performance Lookup"
description: "Queries Dynatrace for real-time application performance metrics including response time and error rate."
tags:
- monitoring
- dynatrace
capability:
exposes:
- type: mcp
namespace: dynatrace
port: 8080
tools:
- name: get-app-performance
description: "Fetch current performance metrics for a monitored application entity."
inputParameters:
- name: entity_id
in: body
type: string
description: "Dynatrace entity identifier."
call: "dynatrace-api.get-entity-metrics"
with:
entity_id: "{{entity_id}}"
consumes:
- type: http
namespace: dynatrace-api
baseUri: "https://goldmansachs.live.dynatrace.com/api/v2"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.dynatrace_api_token"
placement: header
resources:
- name: entities
path: "/entities/{{entity_id}}"
inputParameters:
- name: entity_id
in: path
operations:
- name: get-entity-metrics
method: GET
When an employee departure is logged in Workday, deactivates their Okta account, removes Salesforce access, and closes all open ServiceNow tickets.
naftiko: "0.5"
info:
label: "Employee Offboarding and Access Revocation"
description: "When an employee departure is logged in Workday, deactivates their Okta account, removes Salesforce access, and closes all open ServiceNow tickets."
tags:
- hr
- offboarding
- workday
- okta
- servicenow
capability:
exposes:
- type: mcp
namespace: hr-offboarding
port: 8080
tools:
- name: trigger-offboarding
description: "Given a departing employee Workday ID and Okta user ID, deactivate Okta access, remove Salesforce access, and close open ServiceNow tickets."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID of the departing employee."
- name: okta_user_id
in: body
type: string
description: "The Okta user ID to deactivate."
steps:
- name: deactivate-okta
type: call
call: okta.deactivate-user
with:
user_id: "{{okta_user_id}}"
- name: close-tickets
type: call
call: servicenow.bulk-close-tickets
with:
assigned_to: "{{workday_employee_id}}"
consumes:
- type: http
namespace: okta
baseUri: "https://goldmansachs.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: user-lifecycle
path: "/users/{{user_id}}/lifecycle/deactivate"
inputParameters:
- name: user_id
in: path
operations:
- name: deactivate-user
method: POST
- type: http
namespace: servicenow
baseUri: "https://goldmansachs.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: bulk-close-tickets
method: PATCH
When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions an Okta account, and sends a Microsoft Teams welcome message.
naftiko: "0.5"
info:
label: "Employee Onboarding Orchestrator"
description: "When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions an Okta account, and sends a Microsoft Teams welcome message."
tags:
- hr
- onboarding
- workday
- servicenow
- okta
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: trigger-onboarding
description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence: create a ServiceNow ticket, provision an Okta account, and send a Teams welcome message."
inputParameters:
- name: workday_employee_id
in: body
type: string
description: "The Workday worker ID for the new hire, e.g. W-00123456."
- name: start_date
in: body
type: string
description: "The employee first day in ISO 8601 format, e.g. 2026-04-01."
steps:
- name: get-employee
type: call
call: workday.get-worker
with:
worker_id: "{{workday_employee_id}}"
- name: open-ticket
type: call
call: servicenow.create-incident
with:
short_description: "New hire onboarding: {{get-employee.full_name}}"
category: hr_onboarding
assigned_to: IT_Onboarding
- name: provision-okta
type: call
call: okta.create-user
with:
firstName: "{{get-employee.first_name}}"
lastName: "{{get-employee.last_name}}"
email: "{{get-employee.work_email}}"
login: "{{get-employee.work_email}}"
- name: send-welcome
type: call
call: msteams.send-message
with:
recipient: "{{get-employee.work_email}}"
text: "Welcome to Goldman Sachs, {{get-employee.first_name}}! Your IT onboarding ticket is {{open-ticket.number}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/goldman-sachs/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: servicenow
baseUri: "https://goldmansachs.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: okta
baseUri: "https://goldmansachs.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users"
operations:
- name: create-user
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient}}/sendMail"
inputParameters:
- name: recipient
in: path
operations:
- name: send-message
method: POST
Retrieves company financial summary data from FactSet for investment research purposes.
naftiko: "0.5"
info:
label: "FactSet Company Financials Lookup"
description: "Retrieves company financial summary data from FactSet for investment research purposes."
tags:
- research
- financials
- factset
capability:
exposes:
- type: mcp
namespace: company-financials
port: 8080
tools:
- name: get-financials
description: "Given a FactSet entity ID, return key financial metrics including revenue, EBITDA, and market cap. Use when research analysts need company financial snapshots."
inputParameters:
- name: entity_id
in: body
type: string
description: "The FactSet entity identifier."
call: "factset-api.get-fundamentals"
with:
entity_id: "{{entity_id}}"
outputParameters:
- name: revenue
type: number
mapping: "$.data.revenue"
- name: ebitda
type: number
mapping: "$.data.ebitda"
- name: market_cap
type: number
mapping: "$.data.market_cap"
consumes:
- type: http
namespace: factset-api
baseUri: "https://api.factset.com/content/factset-fundamentals/v2"
authentication:
type: basic
username: "$secrets.factset_user"
password: "$secrets.factset_password"
resources:
- name: fundamentals
path: "/fundamentals"
inputParameters:
- name: entity_id
in: query
operations:
- name: get-fundamentals
method: GET
Pulls research reports from FactSet, stores them in SharePoint, and notifies portfolio managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "FactSet Research Distribution Pipeline"
description: "Pulls research reports from FactSet, stores them in SharePoint, and notifies portfolio managers via Microsoft Teams."
tags:
- research
- factset
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: research-distribution
port: 8080
tools:
- name: distribute-research
description: "Pull and distribute research reports to portfolio managers."
inputParameters:
- name: topic
in: body
type: string
description: "Research topic or sector."
- name: date
in: body
type: string
description: "Report date YYYY-MM-DD."
steps:
- name: get-research
type: call
call: "factset-api.search-research"
with:
topic: "{{topic}}"
date: "{{date}}"
- name: store-report
type: call
call: "sharepoint-api.create-file"
with:
site_id: "research"
path: "Reports/{{topic}}/{{date}}.pdf"
- name: notify-pms
type: call
call: "msteams-api.post-message"
with:
team_id: "portfolio-mgmt"
channel_id: "research"
message: "New {{topic}} research available for {{date}}. Reports: {{get-research.count}}. View in SharePoint."
consumes:
- type: http
namespace: factset-api
baseUri: "https://api.factset.com/content/factset-research/v1"
authentication:
type: basic
username: "$secrets.factset_user"
password: "$secrets.factset_password"
resources:
- name: research
path: "/research/articles"
operations:
- name: search-research
method: GET
- type: http
namespace: sharepoint-api
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{path}}:/content"
inputParameters:
- name: site_id
in: path
- name: path
in: path
operations:
- name: create-file
method: PUT
- type: http
namespace: msteams-api
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_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: post-message
method: POST
Triggers a GitHub Actions release workflow, monitors build status in Datadog, and publishes release notes to Confluence.
naftiko: "0.5"
info:
label: "GitHub Actions Release Pipeline"
description: "Triggers a GitHub Actions release workflow, monitors build status in Datadog, and publishes release notes to Confluence."
tags:
- cicd
- github-actions
- datadog
- confluence
capability:
exposes:
- type: mcp
namespace: release-pipeline
port: 8080
tools:
- name: execute-release
description: "Trigger, monitor, and document a software release."
inputParameters:
- name: repo
in: body
type: string
description: "GitHub repository."
- name: version
in: body
type: string
description: "Release version tag."
steps:
- name: trigger-release
type: call
call: "github-api.dispatch-workflow"
with:
repo: "{{repo}}"
workflow: "release.yml"
ref: "v{{version}}"
- name: monitor-build
type: call
call: "datadog-api.query-metrics"
with:
query: "ci.pipeline.duration{repo:{{repo}},version:{{version}}}"
- name: publish-notes
type: call
call: "confluence-api.create-page"
with:
space: "RELEASES"
title: "Release {{repo}} v{{version}}"
body: "Version: {{version}}. Build time: {{monitor-build.avg}}ms. Status: complete."
consumes:
- type: http
namespace: github-api
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: workflows
path: "/repos/goldman-sachs/{{repo}}/actions/workflows/{{workflow}}/dispatches"
inputParameters:
- name: repo
in: path
- name: workflow
in: path
operations:
- name: dispatch-workflow
method: POST
- type: http
namespace: datadog-api
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: metrics
path: "/query"
operations:
- name: query-metrics
method: GET
- type: http
namespace: confluence-api
baseUri: "https://goldmansachs.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_password"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Retrieves the latest GitHub Actions workflow run status for a specified repository and workflow.
naftiko: "0.5"
info:
label: "GitHub Actions Workflow Status Check"
description: "Retrieves the latest GitHub Actions workflow run status for a specified repository and workflow."
tags:
- ci-cd
- devops
- github-actions
capability:
exposes:
- type: mcp
namespace: workflow-status
port: 8080
tools:
- name: check-workflow
description: "Given a repository and workflow ID, return the latest run status and conclusion. Use when engineers need to verify CI/CD pipeline health."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository in owner/repo format."
- name: workflow_id
in: body
type: string
description: "The workflow file name or ID."
call: "github-api.get-workflow-runs"
with:
repo: "{{repo}}"
workflow_id: "{{workflow_id}}"
outputParameters:
- name: status
type: string
mapping: "$.workflow_runs[0].status"
- name: conclusion
type: string
mapping: "$.workflow_runs[0].conclusion"
- name: run_number
type: integer
mapping: "$.workflow_runs[0].run_number"
consumes:
- type: http
namespace: github-api
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: workflow-runs
path: "/repos/{{repo}}/actions/workflows/{{workflow_id}}/runs"
inputParameters:
- name: repo
in: path
- name: workflow_id
in: path
operations:
- name: get-workflow-runs
method: GET
On a GitHub Actions workflow failure on a protected branch, opens a Jira bug, creates a Datadog event marker, and notifies the platform engineering team in Teams.
naftiko: "0.5"
info:
label: "GitHub CI/CD Pipeline Failure Response"
description: "On a GitHub Actions workflow failure on a protected branch, opens a Jira bug, creates a Datadog event marker, and notifies the platform engineering team in Teams."
tags:
- devops
- cicd
- github
- jira
- datadog
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: devops-ops
port: 8080
tools:
- name: handle-pipeline-failure
description: "Given a GitHub Actions run ID, repo, and branch, open a Jira bug, create a Datadog event, and post the failure summary to the engineering Teams channel."
inputParameters:
- name: run_id
in: body
type: string
description: "The GitHub Actions workflow run ID that failed."
- name: repo
in: body
type: string
description: "The GitHub repository full name, e.g. goldman-sachs/platform."
- name: branch
in: body
type: string
description: "The branch on which the failure occurred."
- name: workflow_name
in: body
type: string
description: "The name of the failed GitHub Actions workflow."
steps:
- name: create-bug
type: call
call: jira.create-issue
with:
project_key: "ENG"
issuetype: "Bug"
summary: "[CI Failure] {{repo}} / {{branch}} — {{workflow_name}}"
description: "Run ID: {{run_id}}"
- name: create-dd-event
type: call
call: datadog.create-event
with:
title: "CI Failure: {{workflow_name}} on {{branch}}"
text: "Run {{run_id}} failed. Jira: {{create-bug.key}}"
alert_type: "error"
- name: notify-engineering
type: call
call: msteams.post-failure
with:
channel: "platform-engineering"
text: "Pipeline failure: {{repo}} | Branch: {{branch}} | Jira: {{create-bug.key}}"
consumes:
- type: http
namespace: jira
baseUri: "https://goldmansachs.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: events
path: "/events"
operations:
- name: create-event
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/engineering/channels/general/messages"
operations:
- name: post-failure
method: POST
Retrieves GitHub Advanced Security code scanning alerts for critical findings and creates prioritized Jira security issues for the application security team.
naftiko: "0.5"
info:
label: "GitHub Code Security Alert to Jira Sync"
description: "Retrieves GitHub Advanced Security code scanning alerts for critical findings and creates prioritized Jira security issues for the application security team."
tags:
- security
- devops
- github
- jira
- code-scanning
capability:
exposes:
- type: mcp
namespace: security-devops
port: 8080
tools:
- name: sync-security-alerts-to-jira
description: "Given a GitHub repository and severity filter, fetch all open code scanning alerts at or above that severity and create Jira security issues for each critical finding."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository full name to scan, e.g. goldman-sachs/platform."
- name: severity_filter
in: body
type: string
description: "Minimum severity level to import: critical, high, or medium."
steps:
- name: get-alerts
type: call
call: github.list-code-scanning-alerts
with:
repo: "{{repo}}"
severity: "{{severity_filter}}"
- name: create-security-issues
type: call
call: jira.create-issue
with:
project_key: "APPSEC"
summary: "Security alerts in {{repo}}: {{get-alerts.total}} {{severity_filter}}+ findings"
description: "Top finding: {{get-alerts.top_rule}}\nSeverity filter: {{severity_filter}}"
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: code-scanning-alerts
path: "/repos/{{repo}}/code-scanning/alerts"
inputParameters:
- name: repo
in: path
operations:
- name: list-code-scanning-alerts
method: GET
- type: http
namespace: jira
baseUri: "https://goldmansachs.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Fetches pull request details from GitHub, runs static analysis via SonarQube, and posts compliance status to Confluence.
naftiko: "0.5"
info:
label: "GitHub PR Review and Compliance Gate"
description: "Fetches pull request details from GitHub, runs static analysis via SonarQube, and posts compliance status to Confluence."
tags:
- cicd
- github
- sonarqube
- confluence
capability:
exposes:
- type: mcp
namespace: pr-compliance
port: 8080
tools:
- name: review-pr-compliance
description: "Review a pull request for code quality and compliance."
inputParameters:
- name: repo
in: body
type: string
description: "GitHub repository name."
- name: pr_number
in: body
type: string
description: "Pull request number."
steps:
- name: get-pr
type: call
call: "github-api.get-pull"
with:
repo: "{{repo}}"
pr_number: "{{pr_number}}"
- name: run-analysis
type: call
call: "sonarqube-api.get-analysis"
with:
project: "{{repo}}"
- name: post-status
type: call
call: "confluence-api.create-page"
with:
space: "ENGINEERING"
title: "PR #{{pr_number}} Compliance: {{repo}}"
body: "Author: {{get-pr.author}}. Quality gate: {{run-analysis.quality_gate}}. Bugs: {{run-analysis.bugs}}."
consumes:
- type: http
namespace: github-api
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: pulls
path: "/repos/goldman-sachs/{{repo}}/pulls/{{pr_number}}"
inputParameters:
- name: repo
in: path
- name: pr_number
in: path
operations:
- name: get-pull
method: GET
- type: http
namespace: sonarqube-api
baseUri: "https://sonarqube.goldmansachs.com/api"
authentication:
type: bearer
token: "$secrets.sonarqube_token"
resources:
- name: analyses
path: "/qualitygates/project_status"
operations:
- name: get-analysis
method: GET
- type: http
namespace: confluence-api
baseUri: "https://goldmansachs.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_password"
resources:
- name: pages
path: "/content"
operations:
- name: create-page
method: POST
Audits Goldman Sachs GitHub repositories for required security settings including branch protection and secret scanning, filing Jira compliance tasks for violations.
naftiko: "0.5"
info:
label: "GitHub Repository Security Policy Audit"
description: "Audits Goldman Sachs GitHub repositories for required security settings including branch protection and secret scanning, filing Jira compliance tasks for violations."
tags:
- security
- devops
- github
- jira
- compliance
capability:
exposes:
- type: mcp
namespace: repo-governance
port: 8080
tools:
- name: enforce-repo-security-policy
description: "Given a GitHub repository and default branch, check branch protection rules; if non-compliant, create a Jira task for the security team."
inputParameters:
- name: repo
in: body
type: string
description: "The GitHub repository full name, e.g. goldman-sachs/platform."
- name: default_branch
in: body
type: string
description: "The default branch to check, e.g. main."
steps:
- name: check-protection
type: call
call: github.get-branch-protection
with:
repo: "{{repo}}"
branch: "{{default_branch}}"
- name: create-compliance-task
type: call
call: jira.create-security-task
with:
project_key: "SEC"
summary: "Repo policy violation: {{repo}}"
description: "Branch {{default_branch}} protection missing required checks."
consumes:
- type: http
namespace: github
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: branch-protection
path: "/repos/{{repo}}/branches/{{branch}}/protection"
inputParameters:
- name: repo
in: path
- name: branch
in: path
operations:
- name: get-branch-protection
method: GET
- type: http
namespace: jira
baseUri: "https://goldmansachs.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-security-task
method: POST
Pulls website traffic metrics from Google Analytics for Goldman Sachs digital properties.
naftiko: "0.5"
info:
label: "Google Analytics Traffic Report"
description: "Pulls website traffic metrics from Google Analytics for Goldman Sachs digital properties."
tags:
- analytics
- google-analytics
capability:
exposes:
- type: mcp
namespace: google-analytics
port: 8080
tools:
- name: get-traffic-report
description: "Fetch a traffic summary for a given property and date range."
inputParameters:
- name: property_id
in: body
type: string
description: "GA4 property ID."
- name: start_date
in: body
type: string
description: "Start date YYYY-MM-DD."
- name: end_date
in: body
type: string
description: "End date YYYY-MM-DD."
call: "ga-api.run-report"
with:
property_id: "{{property_id}}"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
consumes:
- type: http
namespace: ga-api
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/{{property_id}}:runReport"
inputParameters:
- name: property_id
in: path
operations:
- name: run-report
method: POST
Deploys a Cloud Function on GCP, sets up monitoring in Datadog, and logs the deployment in ServiceNow.
naftiko: "0.5"
info:
label: "Google Cloud Function Deployment Pipeline"
description: "Deploys a Cloud Function on GCP, sets up monitoring in Datadog, and logs the deployment in ServiceNow."
tags:
- serverless
- google-cloud-platform
- datadog
- servicenow
capability:
exposes:
- type: mcp
namespace: gcf-deployment
port: 8080
tools:
- name: deploy-cloud-function
description: "Deploy a Google Cloud Function with monitoring and change tracking."
inputParameters:
- name: function_name
in: body
type: string
description: "Cloud Function name."
- name: region
in: body
type: string
description: "GCP region."
steps:
- name: deploy-function
type: call
call: "gcp-api.create-function"
with:
name: "{{function_name}}"
region: "{{region}}"
- name: setup-monitor
type: call
call: "datadog-api.create-monitor"
with:
name: "GCF-{{function_name}}"
query: "avg(last_5m):avg:gcp.cloudfunctions.function.execution_count{function_name:{{function_name}}} < 1"
- name: log-deployment
type: call
call: "servicenow-api.create-change"
with:
short_description: "GCF deployment: {{function_name}}"
description: "Region: {{region}}. Monitor: {{setup-monitor.id}}."
category: "serverless"
consumes:
- type: http
namespace: gcp-api
baseUri: "https://cloudfunctions.googleapis.com/v2"
authentication:
type: bearer
token: "$secrets.gcp_token"
resources:
- name: functions
path: "/projects/goldman-sachs/locations/{{region}}/functions"
inputParameters:
- name: region
in: path
operations:
- name: create-function
method: POST
- type: http
namespace: datadog-api
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: monitors
path: "/monitor"
operations:
- name: create-monitor
method: POST
- type: http
namespace: servicenow-api
baseUri: "https://goldmansachs.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change
method: POST
Fetches metadata and download links for a document stored in Google Drive used for internal collaboration.
naftiko: "0.5"
info:
label: "Google Drive Document Retrieval"
description: "Fetches metadata and download links for a document stored in Google Drive used for internal collaboration."
tags:
- collaboration
- google-drive
capability:
exposes:
- type: mcp
namespace: google-drive
port: 8080
tools:
- name: get-document
description: "Retrieve metadata for a Google Drive file by its ID."
inputParameters:
- name: file_id
in: body
type: string
description: "Google Drive file identifier."
call: "gdrive-api.get-file"
with:
file_id: "{{file_id}}"
consumes:
- type: http
namespace: gdrive-api
baseUri: "https://www.googleapis.com/drive/v3"
authentication:
type: bearer
token: "$secrets.google_drive_token"
resources:
- name: files
path: "/files/{{file_id}}"
inputParameters:
- name: file_id
in: path
operations:
- name: get-file
method: GET
Retrieves a contact record from HubSpot by email for marketing and relationship management activities.
naftiko: "0.5"
info:
label: "HubSpot Contact Lookup"
description: "Retrieves a contact record from HubSpot by email for marketing and relationship management activities."
tags:
- marketing
- hubspot
capability:
exposes:
- type: mcp
namespace: hubspot
port: 8080
tools:
- name: get-contact-by-email
description: "Look up a HubSpot contact by email address."
inputParameters:
- name: email
in: body
type: string
description: "Contact email address."
call: "hubspot-api.search-contacts"
with:
email: "{{email}}"
consumes:
- type: http
namespace: hubspot-api
baseUri: "https://api.hubapi.com/crm/v3"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/objects/contacts/search"
operations:
- name: search-contacts
method: POST
Collects cost data from AWS CloudWatch, analyzes spend in Datadog, and creates optimization recommendations in Jira.
naftiko: "0.5"
info:
label: "Infrastructure Cost Optimization Pipeline"
description: "Collects cost data from AWS CloudWatch, analyzes spend in Datadog, and creates optimization recommendations in Jira."
tags:
- finops
- cloudwatch
- datadog
- jira
capability:
exposes:
- type: mcp
namespace: cost-optimization
port: 8080
tools:
- name: run-cost-analysis
description: "Analyze infrastructure costs and create optimization tickets."
inputParameters:
- name: account_id
in: body
type: string
description: "AWS account identifier."
- name: threshold_pct
in: body
type: string
description: "Overspend threshold percentage."
steps:
- name: get-costs
type: call
call: "cloudwatch-api.get-metric-data"
with:
account_id: "{{account_id}}"
metric: "EstimatedCharges"
- name: analyze-trend
type: call
call: "datadog-api.query-metrics"
with:
query: "aws.billing.estimated_charges{account:{{account_id}}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "FINOPS"
summary: "Cost optimization: account {{account_id}}"
description: "Current spend: {{get-costs.total}}. Trend: {{analyze-trend.trend}}. Threshold: {{threshold_pct}}%."
consumes:
- type: http
namespace: cloudwatch-api
baseUri: "https://monitoring.us-east-1.amazonaws.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.aws_sig_v4"
placement: header
resources:
- name: metrics
path: "/?Action=GetMetricData"
operations:
- name: get-metric-data
method: POST
- type: http
namespace: datadog-api
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: metrics
path: "/query"
operations:
- name: query-metrics
method: GET
- type: http
namespace: jira-api
baseUri: "https://goldmansachs.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_password"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
On a critical Datadog alert for trading infrastructure, creates a ServiceNow P1 incident, pages the on-call team via PagerDuty, and posts to the operations Teams channel.
naftiko: "0.5"
info:
label: "IT Incident P1 Response Chain"
description: "On a critical Datadog alert for trading infrastructure, creates a ServiceNow P1 incident, pages the on-call team via PagerDuty, and posts to the operations Teams channel."
tags:
- itsm
- incident-response
- datadog
- servicenow
- pagerduty
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: itsm-ops
port: 8080
tools:
- name: handle-critical-alert
description: "Given a Datadog alert ID and monitor name, create a ServiceNow P1 incident, trigger PagerDuty escalation, and notify the operations Teams channel."
inputParameters:
- name: alert_id
in: body
type: string
description: "The Datadog alert or event ID triggering the P1 incident."
- name: monitor_name
in: body
type: string
description: "The name of the Datadog monitor that fired."
steps:
- name: create-p1-incident
type: call
call: servicenow.create-p1
with:
short_description: "P1: {{monitor_name}}"
impact: "1"
urgency: "1"
- name: page-oncall
type: call
call: pagerduty.create-incident
with:
title: "P1: {{monitor_name}}"
service_id: "$secrets.pagerduty_service_id"
body: "ServiceNow: {{create-p1-incident.number}}"
- name: notify-ops
type: call
call: msteams.post-p1-alert
with:
channel: "it-ops-p1"
text: "P1 Incident opened: {{monitor_name}} | SN: {{create-p1-incident.number}} | PD: {{page-oncall.id}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://goldmansachs.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-p1
method: POST
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: incidents
path: "/incidents"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/it-ops/channels/p1/messages"
operations:
- name: post-p1-alert
method: POST
Compiles a sprint planning digest from Jira for the platform engineering team and posts a prioritized summary to the engineering Teams channel.
naftiko: "0.5"
info:
label: "Jira Engineering Sprint Digest"
description: "Compiles a sprint planning digest from Jira for the platform engineering team and posts a prioritized summary to the engineering Teams channel."
tags:
- devops
- jira
- microsoft-teams
- sprint-planning
- reporting
capability:
exposes:
- type: mcp
namespace: devops-reporting
port: 8080
tools:
- name: digest-sprint-backlog
description: "Given a Jira project key and sprint name, retrieve all open sprint issues and post a digest to the engineering Teams channel."
inputParameters:
- name: project_key
in: body
type: string
description: "The Jira project key, e.g. PLAT."
- name: sprint_name
in: body
type: string
description: "The sprint name to filter, e.g. Sprint 42."
steps:
- name: get-sprint-issues
type: call
call: jira.search-issues
with:
jql: "project={{project_key}} AND sprint='{{sprint_name}}' AND status!=Done"
- name: post-digest
type: call
call: msteams.post-sprint-digest
with:
channel: "platform-engineering"
text: "Sprint digest {{sprint_name}} ({{project_key}}): {{get-sprint-issues.total}} open issues."
consumes:
- type: http
namespace: jira
baseUri: "https://goldmansachs.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/search"
operations:
- name: search-issues
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/engineering/channels/general/messages"
operations:
- name: post-sprint-digest
method: POST
Reads issues from a Jira project, creates corresponding GitHub issues, and posts a migration summary to Microsoft Teams.
naftiko: "0.5"
info:
label: "Jira to GitHub Issue Migration"
description: "Reads issues from a Jira project, creates corresponding GitHub issues, and posts a migration summary to Microsoft Teams."
tags:
- project-management
- jira
- github
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: jira-github-migration
port: 8080
tools:
- name: migrate-jira-to-github
description: "Migrate Jira issues to GitHub and report on the migration."
inputParameters:
- name: jira_project
in: body
type: string
description: "Jira project key."
- name: github_repo
in: body
type: string
description: "Target GitHub repository."
steps:
- name: get-issues
type: call
call: "jira-api.search-issues"
with:
project: "{{jira_project}}"
- name: create-gh-issue
type: call
call: "github-api.create-issue"
with:
repo: "{{github_repo}}"
title: "{{get-issues.top.summary}}"
body: "Migrated from Jira {{get-issues.top.key}}. Description: {{get-issues.top.description}}"
- name: post-summary
type: call
call: "msteams-api.post-message"
with:
team_id: "engineering"
channel_id: "migrations"
message: "Migrated {{get-issues.total}} issues from Jira {{jira_project}} to GitHub {{github_repo}}."
consumes:
- type: http
namespace: jira-api
baseUri: "https://goldmansachs.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_password"
resources:
- name: search
path: "/search"
operations:
- name: search-issues
method: GET
- type: http
namespace: github-api
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: issues
path: "/repos/goldman-sachs/{{repo}}/issues"
inputParameters:
- name: repo
in: path
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams-api
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_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: post-message
method: POST
Retrieves the current backlog count and velocity metrics for a trade operations Jira project.
naftiko: "0.5"
info:
label: "Jira Trade Ops Backlog Status"
description: "Retrieves the current backlog count and velocity metrics for a trade operations Jira project."
tags:
- project-management
- trading
- jira
capability:
exposes:
- type: mcp
namespace: backlog-status
port: 8080
tools:
- name: get-backlog-status
description: "Given a Jira project key, return the open issue count and sprint velocity. Use when trade ops managers need backlog health metrics."
inputParameters:
- name: project_key
in: body
type: string
description: "The Jira project key."
call: "jira-api.get-backlog"
with:
project_key: "{{project_key}}"
outputParameters:
- name: open_count
type: integer
mapping: "$.total"
- name: high_priority
type: integer
mapping: "$.high_priority_count"
consumes:
- type: http
namespace: jira-api
baseUri: "https://gs-engineering.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: search
path: "/search"
inputParameters:
- name: project_key
in: query
operations:
- name: get-backlog
method: GET
Fetches route configuration from the Kong API Gateway to verify service routing for internal APIs.
naftiko: "0.5"
info:
label: "Kong API Gateway Route Lookup"
description: "Fetches route configuration from the Kong API Gateway to verify service routing for internal APIs."
tags:
- api-management
- kong
capability:
exposes:
- type: mcp
namespace: kong
port: 8080
tools:
- name: get-route
description: "Retrieve a Kong route by its identifier."
inputParameters:
- name: route_id
in: body
type: string
description: "Kong route ID."
call: "kong-api.get-route"
with:
route_id: "{{route_id}}"
consumes:
- type: http
namespace: kong-api
baseUri: "https://kong-admin.goldmansachs.com"
authentication:
type: apikey
key: "apikey"
value: "$secrets.kong_admin_key"
placement: header
resources:
- name: routes
path: "/routes/{{route_id}}"
inputParameters:
- name: route_id
in: path
operations:
- name: get-route
method: GET
Pulls candidate applications from LinkedIn, matches them in Workday, and creates interview scheduling tasks in Microsoft Teams.
naftiko: "0.5"
info:
label: "LinkedIn Recruiting Pipeline Sync"
description: "Pulls candidate applications from LinkedIn, matches them in Workday, and creates interview scheduling tasks in Microsoft Teams."
tags:
- recruiting
- linkedin
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: recruiting-sync
port: 8080
tools:
- name: sync-recruiting-pipeline
description: "Sync LinkedIn candidates into Workday and schedule interviews."
inputParameters:
- name: job_id
in: body
type: string
description: "LinkedIn job posting ID."
steps:
- name: get-applicants
type: call
call: "linkedin-api.get-applications"
with:
job_id: "{{job_id}}"
- name: create-candidates
type: call
call: "workday-api.create-candidate"
with:
name: "{{get-applicants.top_candidate.name}}"
email: "{{get-applicants.top_candidate.email}}"
- name: schedule-interview
type: call
call: "msteams-api.post-message"
with:
team_id: "recruiting-team"
channel_id: "interviews"
message: "New candidate from LinkedIn: {{get-applicants.top_candidate.name}} for {{job_id}}. Workday ID: {{create-candidates.id}}."
consumes:
- type: http
namespace: linkedin-api
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: applications
path: "/jobApplications"
operations:
- name: get-applications
method: GET
- type: http
namespace: workday-api
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: candidates
path: "/goldman-sachs/recruiting/candidates"
operations:
- name: create-candidate
method: POST
- type: http
namespace: msteams-api
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_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: post-message
method: POST
Retrieves active job postings and applicant pipeline statistics from LinkedIn and posts a weekly talent report to the HR team in Microsoft Teams.
naftiko: "0.5"
info:
label: "LinkedIn Talent Pipeline Digest"
description: "Retrieves active job postings and applicant pipeline statistics from LinkedIn and posts a weekly talent report to the HR team in Microsoft Teams."
tags:
- hr
- recruiting
- linkedin
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: talent-reporting
port: 8080
tools:
- name: digest-talent-pipeline
description: "Fetch active LinkedIn job postings and applicant counts for Goldman Sachs and post a weekly pipeline summary to the HR Teams channel."
inputParameters:
- name: organization_id
in: body
type: string
description: "The LinkedIn organization URN for Goldman Sachs."
steps:
- name: get-postings
type: call
call: linkedin.list-job-postings
with:
organization_id: "{{organization_id}}"
- name: post-digest
type: call
call: msteams.post-talent-digest
with:
channel: "hr-talent-acquisition"
text: "Weekly talent pipeline: {{get-postings.total}} active postings, {{get-postings.applicant_count}} total applicants."
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: job-postings
path: "/jobPostings"
operations:
- name: list-job-postings
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/hr/channels/general/messages"
operations:
- name: post-talent-digest
method: POST
Retrieves the delivery status and open rates for a Mailchimp email campaign used for investor communications.
naftiko: "0.5"
info:
label: "Mailchimp Campaign Status Check"
description: "Retrieves the delivery status and open rates for a Mailchimp email campaign used for investor communications."
tags:
- marketing
- mailchimp
capability:
exposes:
- type: mcp
namespace: mailchimp
port: 8080
tools:
- name: get-campaign-status
description: "Fetch status and performance metrics for a Mailchimp campaign."
inputParameters:
- name: campaign_id
in: body
type: string
description: "Mailchimp campaign ID."
call: "mailchimp-api.get-campaign"
with:
campaign_id: "{{campaign_id}}"
consumes:
- type: http
namespace: mailchimp-api
baseUri: "https://us1.api.mailchimp.com/3.0"
authentication:
type: bearer
token: "$secrets.mailchimp_api_key"
resources:
- name: campaigns
path: "/campaigns/{{campaign_id}}"
inputParameters:
- name: campaign_id
in: path
operations:
- name: get-campaign
method: GET
Assigns the appropriate Microsoft 365 license to a new hire via Microsoft Graph based on their job role and department.
naftiko: "0.5"
info:
label: "Microsoft 365 License Provisioning for New Hires"
description: "Assigns the appropriate Microsoft 365 license to a new hire via Microsoft Graph based on their job role and department."
tags:
- hr
- identity
- microsoft-365
- onboarding
- license-management
capability:
exposes:
- type: mcp
namespace: m365-provisioning
port: 8080
tools:
- name: assign-m365-license
description: "Given a new hire user principal name and job role, assign the appropriate Microsoft 365 license SKU via Microsoft Graph API."
inputParameters:
- name: user_upn
in: body
type: string
description: "The new hire user principal name, e.g. john.doe@goldmansachs.com."
- name: license_sku_id
in: body
type: string
description: "The Microsoft 365 license SKU ID to assign, e.g. E5 SKU GUID."
call: msgraph.assign-license
with:
user_upn: "{{user_upn}}"
license_sku_id: "{{license_sku_id}}"
outputParameters:
- name: user_id
type: string
mapping: "$.id"
- name: display_name
type: string
mapping: "$.displayName"
consumes:
- type: http
namespace: msgraph
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: user-licenses
path: "/users/{{user_upn}}/assignLicense"
inputParameters:
- name: user_upn
in: path
operations:
- name: assign-license
method: POST
Detects suspicious sign-ins from Azure AD, creates an incident in PagerDuty, and disables the compromised account in Okta.
naftiko: "0.5"
info:
label: "Microsoft 365 Security Incident Response"
description: "Detects suspicious sign-ins from Azure AD, creates an incident in PagerDuty, and disables the compromised account in Okta."
tags:
- security
- microsoft-azure
- pagerduty
- okta
capability:
exposes:
- type: mcp
namespace: m365-security
port: 8080
tools:
- name: respond-to-security-incident
description: "Detect, alert, and contain a Microsoft 365 security incident."
inputParameters:
- name: user_principal
in: body
type: string
description: "Azure AD user principal name."
steps:
- name: get-sign-ins
type: call
call: "azuread-api.get-sign-ins"
with:
user_principal: "{{user_principal}}"
- name: alert-security
type: call
call: "pagerduty-api.create-event"
with:
routing_key: "$secrets.pagerduty_routing_key"
summary: "Suspicious sign-in: {{user_principal}}. Risk: {{get-sign-ins.risk_level}}. Location: {{get-sign-ins.location}}."
- name: disable-account
type: call
call: "okta-api.suspend-user"
with:
login: "{{user_principal}}"
consumes:
- type: http
namespace: azuread-api
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: sign-ins
path: "/auditLogs/signIns"
operations:
- name: get-sign-ins
method: GET
- type: http
namespace: pagerduty-api
baseUri: "https://events.pagerduty.com/v2"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: events
path: "/enqueue"
operations:
- name: create-event
method: POST
- type: http
namespace: okta-api
baseUri: "https://goldmansachs.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users/{{login}}/lifecycle/suspend"
inputParameters:
- name: login
in: path
operations:
- name: suspend-user
method: POST
Posts a message to a Microsoft Teams channel for real-time team communication and alerting.
naftiko: "0.5"
info:
label: "Microsoft Teams Channel Message Post"
description: "Posts a message to a Microsoft Teams channel for real-time team communication and alerting."
tags:
- communication
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: msteams
port: 8080
tools:
- name: post-channel-message
description: "Send a message to a specific Teams channel."
inputParameters:
- name: team_id
in: body
type: string
description: "Teams team identifier."
- name: channel_id
in: body
type: string
description: "Teams channel identifier."
- name: message
in: body
type: string
description: "Message text to post."
call: "msteams-api.post-message"
with:
team_id: "{{team_id}}"
channel_id: "{{channel_id}}"
message: "{{message}}"
consumes:
- type: http
namespace: msteams-api
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_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: post-message
method: POST
Fetches current open alert violations from New Relic for a specified policy to surface active infrastructure issues.
naftiko: "0.5"
info:
label: "New Relic Alert Status Lookup"
description: "Fetches current open alert violations from New Relic for a specified policy to surface active infrastructure issues."
tags:
- monitoring
- new-relic
capability:
exposes:
- type: mcp
namespace: new-relic
port: 8080
tools:
- name: get-open-violations
description: "List currently open alert violations for a given policy ID."
inputParameters:
- name: policy_id
in: body
type: string
description: "New Relic alert policy ID."
call: "newrelic-api.list-violations"
with:
policy_id: "{{policy_id}}"
consumes:
- type: http
namespace: newrelic-api
baseUri: "https://api.newrelic.com/v2"
authentication:
type: apikey
key: "Api-Key"
value: "$secrets.newrelic_api_key"
placement: header
resources:
- name: violations
path: "/alerts_violations.json"
operations:
- name: list-violations
method: GET
Launches an access certification in Okta, pulls reviewer assignments from Workday, and tracks completion in ServiceNow.
naftiko: "0.5"
info:
label: "Okta Access Certification Campaign"
description: "Launches an access certification in Okta, pulls reviewer assignments from Workday, and tracks completion in ServiceNow."
tags:
- identity
- okta
- workday
- servicenow
capability:
exposes:
- type: mcp
namespace: access-certification
port: 8080
tools:
- name: run-certification-campaign
description: "Launch and track an access certification campaign."
inputParameters:
- name: campaign_name
in: body
type: string
description: "Certification campaign name."
- name: scope
in: body
type: string
description: "Application scope for review."
steps:
- name: launch-campaign
type: call
call: "okta-api.create-campaign"
with:
name: "{{campaign_name}}"
scope: "{{scope}}"
- name: get-reviewers
type: call
call: "workday-api.get-managers"
with:
scope: "{{scope}}"
- name: track-progress
type: call
call: "servicenow-api.create-incident"
with:
short_description: "Access cert: {{campaign_name}}"
description: "Scope: {{scope}}. Reviewers: {{get-reviewers.count}}. Campaign ID: {{launch-campaign.id}}."
category: "access_certification"
consumes:
- type: http
namespace: okta-api
baseUri: "https://goldmansachs.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: campaigns
path: "/iga/campaigns"
operations:
- name: create-campaign
method: POST
- type: http
namespace: workday-api
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: managers
path: "/goldman-sachs/workers"
operations:
- name: get-managers
method: GET
- type: http
namespace: servicenow-api
baseUri: "https://goldmansachs.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
Retrieves all user assignments for a critical Okta application and posts an access review summary to the security team in Microsoft Teams for quarterly certification.
naftiko: "0.5"
info:
label: "Okta Application Access Quarterly Review"
description: "Retrieves all user assignments for a critical Okta application and posts an access review summary to the security team in Microsoft Teams for quarterly certification."
tags:
- identity
- security
- okta
- microsoft-teams
- access-review
- compliance
capability:
exposes:
- type: mcp
namespace: access-review
port: 8080
tools:
- name: run-app-access-review
description: "Given an Okta application ID and name, list all assigned users and post a quarterly access review summary to the security Teams channel."
inputParameters:
- name: app_id
in: body
type: string
description: "The Okta application ID to review, e.g. 0oa1abc2defGHI3jk."
- name: app_name
in: body
type: string
description: "Human-readable application name for the report, e.g. Trading Platform."
steps:
- name: list-app-users
type: call
call: okta.list-app-users
with:
app_id: "{{app_id}}"
- name: post-review
type: call
call: msteams.post-review-summary
with:
channel: "security-access-reviews"
text: "Q1 access review for {{app_name}}: {{list-app-users.total}} users assigned. Review required by end of quarter."
consumes:
- type: http
namespace: okta
baseUri: "https://goldmansachs.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: app-users
path: "/apps/{{app_id}}/users"
inputParameters:
- name: app_id
in: path
operations:
- name: list-app-users
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/security/channels/reviews/messages"
operations:
- name: post-review-summary
method: POST
Audits all Okta users for MFA enrollment, flags non-compliant users, and creates a ServiceNow compliance incident for the security team.
naftiko: "0.5"
info:
label: "Okta MFA Compliance Audit"
description: "Audits all Okta users for MFA enrollment, flags non-compliant users, and creates a ServiceNow compliance incident for the security team."
tags:
- identity
- security
- okta
- servicenow
- compliance
capability:
exposes:
- type: mcp
namespace: security-compliance
port: 8080
tools:
- name: audit-mfa-compliance
description: "List all active Okta users, identify those without MFA enrolled, and open a ServiceNow compliance incident when non-compliance exceeds threshold."
inputParameters:
- name: compliance_threshold
in: body
type: number
description: "Maximum allowed percentage of non-MFA users before opening a compliance incident."
steps:
- name: list-users
type: call
call: okta.list-active-users
- name: create-compliance-incident
type: call
call: servicenow.create-compliance-incident
with:
short_description: "Okta MFA non-compliance: threshold exceeded at {{compliance_threshold}}%"
category: security_compliance
consumes:
- type: http
namespace: okta
baseUri: "https://goldmansachs.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users"
operations:
- name: list-active-users
method: GET
- type: http
namespace: servicenow
baseUri: "https://goldmansachs.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-compliance-incident
method: POST
Checks the health and status of Oracle Cloud Infrastructure resources provisioned for Goldman Sachs applications.
naftiko: "0.5"
info:
label: "Oracle Cloud Infrastructure Status Check"
description: "Checks the health and status of Oracle Cloud Infrastructure resources provisioned for Goldman Sachs applications."
tags:
- infrastructure
- oracle-cloud
capability:
exposes:
- type: mcp
namespace: oracle-cloud
port: 8080
tools:
- name: check-infra-status
description: "Retrieve the current status of OCI compute and network resources."
inputParameters:
- name: resource_id
in: body
type: string
description: "OCI resource OCID."
call: "oci-api.get-resource-status"
with:
resource_id: "{{resource_id}}"
consumes:
- type: http
namespace: oci-api
baseUri: "https://iaas.us-ashburn-1.oraclecloud.com/20160918"
authentication:
type: bearer
token: "$secrets.oci_token"
resources:
- name: resources
path: "/instances/{{resource_id}}"
inputParameters:
- name: resource_id
in: path
operations:
- name: get-resource-status
method: GET
Analyzes Oracle database performance metrics, identifies slow queries in Datadog, and creates optimization tasks in Jira.
naftiko: "0.5"
info:
label: "Oracle Database Performance Tuning Workflow"
description: "Analyzes Oracle database performance metrics, identifies slow queries in Datadog, and creates optimization tasks in Jira."
tags:
- database
- oracle
- datadog
- jira
capability:
exposes:
- type: mcp
namespace: oracle-tuning
port: 8080
tools:
- name: tune-oracle-performance
description: "Analyze database performance and create tuning tasks."
inputParameters:
- name: db_instance
in: body
type: string
description: "Oracle database instance name."
steps:
- name: get-metrics
type: call
call: "oracle-api.get-performance"
with:
instance: "{{db_instance}}"
- name: analyze-queries
type: call
call: "datadog-api.query-metrics"
with:
query: "oracle.queries.slow{instance:{{db_instance}}}"
- name: create-task
type: call
call: "jira-api.create-issue"
with:
project: "DBA"
summary: "Oracle tuning: {{db_instance}}"
description: "Slow queries: {{analyze-queries.count}}. Avg response: {{get-metrics.avg_response_ms}}ms."
consumes:
- type: http
namespace: oracle-api
baseUri: "https://oracle-cloud.goldmansachs.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_token"
resources:
- name: instances
path: "/dbSystems/{{instance}}/metrics"
inputParameters:
- name: instance
in: path
operations:
- name: get-performance
method: GET
- type: http
namespace: datadog-api
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: metrics
path: "/query"
operations:
- name: query-metrics
method: GET
- type: http
namespace: jira-api
baseUri: "https://goldmansachs.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_password"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Fetches a triggered PagerDuty incident, creates a corresponding Jira ticket, and posts an update to Microsoft Teams.
naftiko: "0.5"
info:
label: "PagerDuty Incident to Jira Sync"
description: "Fetches a triggered PagerDuty incident, creates a corresponding Jira ticket, and posts an update to Microsoft Teams."
tags:
- incident-management
- pagerduty
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: pd-jira-sync
port: 8080
tools:
- name: sync-incident-to-jira
description: "Sync a PagerDuty incident into Jira and notify the team."
inputParameters:
- name: incident_id
in: body
type: string
description: "PagerDuty incident ID."
steps:
- name: get-incident
type: call
call: "pagerduty-api.get-incident"
with:
incident_id: "{{incident_id}}"
- name: create-ticket
type: call
call: "jira-api.create-issue"
with:
project: "OPS"
summary: "PD: {{get-incident.title}}"
description: "Severity: {{get-incident.urgency}}. Service: {{get-incident.service}}."
- name: notify-team
type: call
call: "msteams-api.post-message"
with:
team_id: "sre-team"
channel_id: "incidents"
message: "PagerDuty incident {{incident_id}} synced to Jira: {{create-ticket.key}}."
consumes:
- type: http
namespace: pagerduty-api
baseUri: "https://api.pagerduty.com"
authentication:
type: bearer
token: "$secrets.pagerduty_token"
resources:
- name: incidents
path: "/incidents/{{incident_id}}"
inputParameters:
- name: incident_id
in: path
operations:
- name: get-incident
method: GET
- type: http
namespace: jira-api
baseUri: "https://goldmansachs.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_password"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: msteams-api
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_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: post-message
method: POST
Retrieves the current on-call engineer from PagerDuty for a given escalation policy and returns their name and contact information.
naftiko: "0.5"
info:
label: "PagerDuty On-Call Lookup"
description: "Retrieves the current on-call engineer from PagerDuty for a given escalation policy and returns their name and contact information."
tags:
- itsm
- pagerduty
- on-call
- operations
capability:
exposes:
- type: mcp
namespace: oncall-lookup
port: 8080
tools:
- name: get-oncall-engineer
description: "Given a PagerDuty schedule ID, return the name and email of the currently on-call engineer. Use to identify the correct escalation target for production incidents."
inputParameters:
- name: schedule_id
in: body
type: string
description: "The PagerDuty schedule ID to query."
call: pagerduty.get-oncall
with:
schedule_id: "{{schedule_id}}"
outputParameters:
- name: user_name
type: string
mapping: "$.oncalls[0].user.summary"
- name: user_email
type: string
mapping: "$.oncalls[0].user.email"
- name: escalation_policy
type: string
mapping: "$.oncalls[0].escalation_policy.summary"
consumes:
- type: http
namespace: pagerduty
baseUri: "https://api.pagerduty.com"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.pagerduty_token"
placement: header
resources:
- name: oncalls
path: "/oncalls"
operations:
- name: get-oncall
method: GET
Monitors Power Automate flow runs for failures, creates incidents in ServiceNow, and notifies flow owners via Microsoft Teams.
naftiko: "0.5"
info:
label: "Power Automate Workflow Failure Handler"
description: "Monitors Power Automate flow runs for failures, creates incidents in ServiceNow, and notifies flow owners via Microsoft Teams."
tags:
- automation
- microsoft-power-automate
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: flow-failure
port: 8080
tools:
- name: handle-flow-failure
description: "Detect Power Automate failures and create incident notifications."
inputParameters:
- name: flow_id
in: body
type: string
description: "Power Automate flow identifier."
steps:
- name: get-runs
type: call
call: "powerautomate-api.get-flow-runs"
with:
flow_id: "{{flow_id}}"
- name: create-incident
type: call
call: "servicenow-api.create-incident"
with:
short_description: "Power Automate failure: {{flow_id}}"
description: "Last run: {{get-runs.last_run.status}}. Error: {{get-runs.last_run.error}}."
category: "automation"
- name: notify-owner
type: call
call: "msteams-api.post-message"
with:
team_id: "automation-team"
channel_id: "alerts"
message: "Flow {{flow_id}} failed. Incident: {{create-incident.number}}."
consumes:
- type: http
namespace: powerautomate-api
baseUri: "https://management.azure.com/providers/Microsoft.ProcessSimple"
authentication:
type: bearer
token: "$secrets.azure_management_token"
resources:
- name: flows
path: "/environments/Default/flows/{{flow_id}}/runs"
inputParameters:
- name: flow_id
in: path
operations:
- name: get-flow-runs
method: GET
- type: http
namespace: servicenow-api
baseUri: "https://goldmansachs.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams-api
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_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: post-message
method: POST
Triggers a Power BI dataset refresh for the divisional P&L dashboard and notifies the finance team in Microsoft Teams upon completion.
naftiko: "0.5"
info:
label: "Power BI Financial Performance Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for the divisional P&L dashboard and notifies the finance team in Microsoft Teams upon completion."
tags:
- finance
- data-analytics
- power-bi
- microsoft-teams
- reporting
capability:
exposes:
- type: mcp
namespace: finance-reporting
port: 8080
tools:
- name: refresh-pl-dashboard
description: "Given a Power BI workspace and dataset ID for the P&L dashboard, trigger a refresh and notify the CFO team channel in Teams."
inputParameters:
- name: workspace_id
in: body
type: string
description: "The Power BI workspace GUID containing the P&L dashboard."
- name: dataset_id
in: body
type: string
description: "The Power BI dataset GUID to refresh."
steps:
- name: trigger-refresh
type: call
call: powerbi.refresh-dataset
with:
workspace_id: "{{workspace_id}}"
dataset_id: "{{dataset_id}}"
- name: notify-finance
type: call
call: msteams.notify-finance
with:
channel: "cfo-finance-analytics"
text: "P&L dashboard dataset {{dataset_id}} refresh triggered."
consumes:
- 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: refresh-dataset
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/finance/channels/analytics/messages"
operations:
- name: notify-finance
method: POST
Extracts financial data from Snowflake, generates a formatted report via Power BI, and files it in SharePoint for regulatory submission.
naftiko: "0.5"
info:
label: "Quarterly Regulatory Report Pipeline"
description: "Extracts financial data from Snowflake, generates a formatted report via Power BI, and files it in SharePoint for regulatory submission."
tags:
- compliance
- snowflake
- power-bi
- sharepoint
capability:
exposes:
- type: mcp
namespace: regulatory-reporting
port: 8080
tools:
- name: generate-regulatory-report
description: "Extract, format, and file a quarterly regulatory report."
inputParameters:
- name: quarter
in: body
type: string
description: "Quarter identifier e.g. Q1-2026."
- name: report_type
in: body
type: string
description: "Report type code."
steps:
- name: extract-data
type: call
call: "snowflake-api.run-query"
with:
query: "SELECT * FROM regulatory.{{report_type}} WHERE quarter = '{{quarter}}'"
- name: refresh-dashboard
type: call
call: "powerbi-api.refresh-dataset"
with:
dataset_id: "reg-{{report_type}}"
- name: store-report
type: call
call: "sharepoint-api.create-file"
with:
site_id: "compliance"
path: "Regulatory/{{quarter}}/{{report_type}}.pdf"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://goldmansachs.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: powerbi-api
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
- type: http
namespace: sharepoint-api
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{path}}:/content"
inputParameters:
- name: site_id
in: path
- name: path
in: path
operations:
- name: create-file
method: PUT
When a Salesforce opportunity moves to Closed-Won, creates a ServiceNow onboarding project task and notifies the relationship manager in Teams.
naftiko: "0.5"
info:
label: "Salesforce Client Onboarding Workflow"
description: "When a Salesforce opportunity moves to Closed-Won, creates a ServiceNow onboarding project task and notifies the relationship manager in Teams."
tags:
- sales
- crm
- salesforce
- servicenow
- microsoft-teams
- client-onboarding
capability:
exposes:
- type: mcp
namespace: client-onboarding
port: 8080
tools:
- name: start-client-onboarding
description: "Given a Salesforce opportunity ID at Closed-Won, retrieve the deal details, create a ServiceNow onboarding project, and notify the relationship manager in Teams."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "The Salesforce Opportunity record ID to onboard."
steps:
- name: get-opportunity
type: call
call: salesforce.get-opportunity
with:
opportunity_id: "{{opportunity_id}}"
- name: create-onboarding-project
type: call
call: servicenow.create-project
with:
short_description: "Client onboarding: {{get-opportunity.account_name}}"
category: client_onboarding
owner: "{{get-opportunity.owner_email}}"
- name: notify-rm
type: call
call: msteams.notify-rm
with:
recipient: "{{get-opportunity.owner_email}}"
text: "Client onboarding started for {{get-opportunity.account_name}}. Project: {{create-onboarding-project.number}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://goldmansachs.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: get-opportunity
method: GET
- type: http
namespace: servicenow
baseUri: "https://goldmansachs.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: projects
path: "/table/pm_project"
operations:
- name: create-project
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient}}/sendMail"
inputParameters:
- name: recipient
in: path
operations:
- name: notify-rm
method: POST
Compiles a weekly Salesforce opportunity pipeline report by division and posts it to the investment banking Teams channel.
naftiko: "0.5"
info:
label: "Salesforce Client Opportunity Pipeline Report"
description: "Compiles a weekly Salesforce opportunity pipeline report by division and posts it to the investment banking Teams channel."
tags:
- sales
- crm
- salesforce
- microsoft-teams
- reporting
- investment-banking
capability:
exposes:
- type: mcp
namespace: ib-reporting
port: 8080
tools:
- name: digest-opportunity-pipeline
description: "Retrieve open Salesforce opportunities by division, compute pipeline values, and post a weekly digest to the investment banking Teams channel."
inputParameters:
- name: division
in: body
type: string
description: "The Goldman Sachs division to report on, e.g. Investment Banking, Global Markets."
- name: fiscal_quarter
in: body
type: string
description: "The fiscal quarter to scope the report, e.g. Q1-2026."
steps:
- name: query-opps
type: call
call: salesforce.query-opportunities
with:
division: "{{division}}"
fiscal_quarter: "{{fiscal_quarter}}"
- name: post-digest
type: call
call: msteams.post-pipeline-digest
with:
channel: "ib-pipeline"
text: "Pipeline digest {{fiscal_quarter}} — {{division}}: {{query-opps.total}} open deals, ${{query-opps.pipeline_value}} total value."
consumes:
- type: http
namespace: salesforce
baseUri: "https://goldmansachs.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/query"
operations:
- name: query-opportunities
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/ib/channels/pipeline/messages"
operations:
- name: post-pipeline-digest
method: POST
Enriches a new Salesforce lead with company intelligence from ZoomInfo and updates the record with firmographic data.
naftiko: "0.5"
info:
label: "Salesforce Lead Enrichment via ZoomInfo"
description: "Enriches a new Salesforce lead with company intelligence from ZoomInfo and updates the record with firmographic data."
tags:
- sales
- crm
- salesforce
- zoominfo
- lead-enrichment
capability:
exposes:
- type: mcp
namespace: crm-enrichment
port: 8080
tools:
- name: enrich-salesforce-lead
description: "Given a Salesforce lead ID and company name, fetch firmographic data from ZoomInfo and patch the Salesforce lead with revenue, employee count, and industry."
inputParameters:
- name: lead_id
in: body
type: string
description: "The Salesforce Lead record ID to enrich."
- name: company_name
in: body
type: string
description: "The company name to look up in ZoomInfo."
steps:
- name: get-company-data
type: call
call: zoominfo.search-company
with:
company_name: "{{company_name}}"
- name: update-lead
type: call
call: salesforce.patch-lead
with:
lead_id: "{{lead_id}}"
annual_revenue: "{{get-company-data.revenue}}"
number_of_employees: "{{get-company-data.employee_count}}"
industry: "{{get-company-data.industry}}"
consumes:
- type: http
namespace: zoominfo
baseUri: "https://api.zoominfo.com/search"
authentication:
type: bearer
token: "$secrets.zoominfo_token"
resources:
- name: companies
path: "/company"
operations:
- name: search-company
method: POST
- type: http
namespace: salesforce
baseUri: "https://goldmansachs.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead/{{lead_id}}"
inputParameters:
- name: lead_id
in: path
operations:
- name: patch-lead
method: PATCH
Converts a won Salesforce opportunity into a trade order, validates pricing via Bloomberg, and logs the trade in Snowflake.
naftiko: "0.5"
info:
label: "Salesforce Opportunity to Trade Pipeline"
description: "Converts a won Salesforce opportunity into a trade order, validates pricing via Bloomberg, and logs the trade in Snowflake."
tags:
- trading
- salesforce
- bloomberg-enterprise-data
- snowflake
capability:
exposes:
- type: mcp
namespace: opp-to-trade
port: 8080
tools:
- name: convert-opportunity-to-trade
description: "Convert a CRM opportunity into a validated trade order."
inputParameters:
- name: opportunity_id
in: body
type: string
description: "Salesforce opportunity ID."
steps:
- name: get-opp
type: call
call: "salesforce-api.get-opportunity"
with:
opportunity_id: "{{opportunity_id}}"
- name: validate-price
type: call
call: "bloomberg-api.get-quote"
with:
ticker: "{{get-opp.instrument_ticker}}"
- name: log-trade
type: call
call: "snowflake-api.run-query"
with:
query: "INSERT INTO trades.orders (opp_id, instrument, price, quantity) VALUES ('{{opportunity_id}}', '{{get-opp.instrument_ticker}}', {{validate-price.last_price}}, {{get-opp.quantity}})"
consumes:
- type: http
namespace: salesforce-api
baseUri: "https://goldmansachs.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity/{{opportunity_id}}"
inputParameters:
- name: opportunity_id
in: path
operations:
- name: get-opportunity
method: GET
- type: http
namespace: bloomberg-api
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: quotes
path: "/quotes/{{ticker}}"
inputParameters:
- name: ticker
in: path
operations:
- name: get-quote
method: GET
- type: http
namespace: snowflake-api
baseUri: "https://goldmansachs.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: run-query
method: POST
Extracts quarterly pipeline data from Salesforce, analyzes trends in Snowflake, and generates executive dashboards in Power BI.
naftiko: "0.5"
info:
label: "Salesforce Quarterly Review Automation"
description: "Extracts quarterly pipeline data from Salesforce, analyzes trends in Snowflake, and generates executive dashboards in Power BI."
tags:
- sales
- salesforce
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: quarterly-review
port: 8080
tools:
- name: generate-quarterly-review
description: "Generate a quarterly sales review from CRM data."
inputParameters:
- name: quarter
in: body
type: string
description: "Quarter identifier e.g. Q1-2026."
- name: region
in: body
type: string
description: "Sales region."
steps:
- name: get-pipeline
type: call
call: "salesforce-api.get-opportunities"
with:
quarter: "{{quarter}}"
region: "{{region}}"
- name: analyze-trends
type: call
call: "snowflake-api.run-query"
with:
query: "SELECT * FROM sales.quarterly_trends WHERE quarter = '{{quarter}}' AND region = '{{region}}'"
- name: refresh-dashboard
type: call
call: "powerbi-api.refresh-dataset"
with:
dataset_id: "quarterly-review-{{region}}"
consumes:
- type: http
namespace: salesforce-api
baseUri: "https://goldmansachs.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: opportunities
path: "/sobjects/Opportunity"
operations:
- name: get-opportunities
method: GET
- type: http
namespace: snowflake-api
baseUri: "https://goldmansachs.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: powerbi-api
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
Retrieves the current status and details of a trade order from Salesforce by order ID for Goldman Sachs front-office operations review.
naftiko: "0.5"
info:
label: "Salesforce Trade Order Status Lookup"
description: "Retrieves the current status and details of a trade order from Salesforce by order ID for Goldman Sachs front-office operations review."
tags:
- trading
- salesforce
- order-management
- lookup
capability:
exposes:
- type: mcp
namespace: trade-orders
port: 8080
tools:
- name: get-trade-order-status
description: "Given a Salesforce trade order ID, returns the order status, asset class, notional amount, and counterparty. Use for trade desk inquiries."
inputParameters:
- name: order_id
in: body
type: string
description: "The Salesforce trade order record ID."
call: "salesforce-trading.get-order"
with:
orderId: "{{order_id}}"
outputParameters:
- name: status
type: string
mapping: "$.Status__c"
- name: notional_amount
type: number
mapping: "$.Notional_Amount__c"
consumes:
- type: http
namespace: salesforce-trading
baseUri: "https://goldmansachs.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: trade-orders
path: "/sobjects/Trade_Order__c/{{orderId}}"
inputParameters:
- name: orderId
in: path
operations:
- name: get-order
method: GET
Identifies expiring contracts in SAP Ariba, notifies procurement in Jira, and sends renewal reminders through Microsoft Outlook.
naftiko: "0.5"
info:
label: "SAP Ariba Contract Renewal Pipeline"
description: "Identifies expiring contracts in SAP Ariba, notifies procurement in Jira, and sends renewal reminders through Microsoft Outlook."
tags:
- procurement
- sap-ariba
- jira
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: contract-renewal
port: 8080
tools:
- name: process-contract-renewals
description: "Identify and process expiring vendor contracts."
inputParameters:
- name: days_until_expiry
in: body
type: string
description: "Number of days before expiry to trigger renewal."
steps:
- name: get-contracts
type: call
call: "ariba-api.list-expiring-contracts"
with:
days: "{{days_until_expiry}}"
- name: create-tasks
type: call
call: "jira-api.create-issue"
with:
project: "PROCUREMENT"
summary: "Contract renewal: {{get-contracts.top.vendor_name}}"
description: "Contract: {{get-contracts.top.contract_id}}. Expires: {{get-contracts.top.expiry_date}}. Value: {{get-contracts.top.value}}."
- name: send-reminder
type: call
call: "outlook-api.send-mail"
with:
to: "{{get-contracts.top.owner_email}}"
subject: "Contract renewal required: {{get-contracts.top.vendor_name}}"
body: "Your contract with {{get-contracts.top.vendor_name}} expires on {{get-contracts.top.expiry_date}}. Jira: {{create-tasks.key}}."
consumes:
- type: http
namespace: ariba-api
baseUri: "https://openapi.ariba.com/api/sourcing-projects/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: contracts
path: "/contracts"
operations:
- name: list-expiring-contracts
method: GET
- type: http
namespace: jira-api
baseUri: "https://goldmansachs.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_password"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
- type: http
namespace: outlook-api
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-mail
method: POST
Retrieves a pending SAP Ariba purchase requisition, validates against procurement policy, and routes it for approval via ServiceNow.
naftiko: "0.5"
info:
label: "SAP Ariba Procurement Approval Routing"
description: "Retrieves a pending SAP Ariba purchase requisition, validates against procurement policy, and routes it for approval via ServiceNow."
tags:
- procurement
- sap-ariba
- servicenow
- approval
- finance
capability:
exposes:
- type: mcp
namespace: procurement-ops
port: 8080
tools:
- name: route-procurement-approval
description: "Given an Ariba purchase requisition ID, retrieve the requisition details and create a ServiceNow approval task routed to the appropriate approver."
inputParameters:
- name: requisition_id
in: body
type: string
description: "The SAP Ariba purchase requisition ID to process."
- name: approver_email
in: body
type: string
description: "Email of the approver to route the requisition to."
steps:
- name: get-requisition
type: call
call: ariba.get-requisition
with:
requisition_id: "{{requisition_id}}"
- name: create-approval
type: call
call: servicenow.create-procurement-approval
with:
short_description: "Procurement approval: {{get-requisition.title}}"
amount: "{{get-requisition.total_amount}}"
approver: "{{approver_email}}"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/requisition/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: requisitions
path: "/requisitions/{{requisition_id}}"
inputParameters:
- name: requisition_id
in: path
operations:
- name: get-requisition
method: GET
- type: http
namespace: servicenow
baseUri: "https://goldmansachs.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: approvals
path: "/table/sysapproval_approver"
operations:
- name: create-procurement-approval
method: POST
Registers a new supplier in SAP Ariba, creates a ServiceNow vendor request ticket, and notifies the procurement team in Microsoft Teams.
naftiko: "0.5"
info:
label: "SAP Ariba Supplier Onboarding"
description: "Registers a new supplier in SAP Ariba, creates a ServiceNow vendor request ticket, and notifies the procurement team in Microsoft Teams."
tags:
- procurement
- sap-ariba
- servicenow
- microsoft-teams
- supplier-management
capability:
exposes:
- type: mcp
namespace: supplier-onboarding
port: 8080
tools:
- name: onboard-supplier
description: "Given a supplier name, contact email, and spend category, register in SAP Ariba, open a ServiceNow vendor request, and notify the procurement team in Teams."
inputParameters:
- name: supplier_name
in: body
type: string
description: "Legal name of the new supplier."
- name: supplier_email
in: body
type: string
description: "Primary contact email for the supplier."
- name: spend_category
in: body
type: string
description: "Ariba spend category, e.g. Technology Services, Professional Services."
steps:
- name: register-supplier
type: call
call: ariba.create-supplier
with:
name: "{{supplier_name}}"
email: "{{supplier_email}}"
category: "{{spend_category}}"
- name: create-vendor-ticket
type: call
call: servicenow.create-vendor-request
with:
short_description: "Supplier onboarding: {{supplier_name}}"
supplier_id: "{{register-supplier.supplier_id}}"
- name: notify-procurement
type: call
call: msteams.notify-procurement
with:
channel: "procurement-ops"
text: "Supplier {{supplier_name}} registered in Ariba (ID: {{register-supplier.supplier_id}}). SN: {{create-vendor-ticket.number}}"
consumes:
- type: http
namespace: ariba
baseUri: "https://openapi.ariba.com/api/supplier/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: suppliers
path: "/suppliers"
operations:
- name: create-supplier
method: POST
- type: http
namespace: servicenow
baseUri: "https://goldmansachs.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: vendor-requests
path: "/table/u_vendor_request"
operations:
- name: create-vendor-request
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/procurement/channels/general/messages"
operations:
- name: notify-procurement
method: POST
Scans expense reports from SAP Concur for anomalies, flags suspicious entries in Snowflake, and escalates to compliance via ServiceNow.
naftiko: "0.5"
info:
label: "SAP Concur Expense Fraud Detection"
description: "Scans expense reports from SAP Concur for anomalies, flags suspicious entries in Snowflake, and escalates to compliance via ServiceNow."
tags:
- finance
- sap-concur
- snowflake
- servicenow
capability:
exposes:
- type: mcp
namespace: expense-fraud
port: 8080
tools:
- name: detect-expense-fraud
description: "Scan expense reports for fraudulent or suspicious patterns."
inputParameters:
- name: report_id
in: body
type: string
description: "SAP Concur expense report ID."
steps:
- name: get-expenses
type: call
call: "concur-api.get-report"
with:
report_id: "{{report_id}}"
- name: check-anomalies
type: call
call: "snowflake-api.run-query"
with:
query: "SELECT * FROM finance.expense_anomaly_model WHERE report_id = '{{report_id}}'"
- name: escalate
type: call
call: "servicenow-api.create-incident"
with:
short_description: "Expense anomaly: report {{report_id}}"
description: "Total: {{get-expenses.total}}. Anomalies: {{check-anomalies.count}}. Risk score: {{check-anomalies.risk_score}}."
category: "expense_compliance"
consumes:
- type: http
namespace: concur-api
baseUri: "https://us.api.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: reports
path: "/expense/reports/{{report_id}}"
inputParameters:
- name: report_id
in: path
operations:
- name: get-report
method: GET
- type: http
namespace: snowflake-api
baseUri: "https://goldmansachs.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: servicenow-api
baseUri: "https://goldmansachs.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
Retrieves submitted SAP Concur expense reports, uses Anthropic to flag policy violations, and creates ServiceNow audit tasks for out-of-policy items.
naftiko: "0.5"
info:
label: "SAP Concur Expense Policy Audit"
description: "Retrieves submitted SAP Concur expense reports, uses Anthropic to flag policy violations, and creates ServiceNow audit tasks for out-of-policy items."
tags:
- finance
- expense-management
- sap-concur
- anthropic
- servicenow
- audit
capability:
exposes:
- type: mcp
namespace: expense-audit
port: 8080
tools:
- name: audit-expense-reports
description: "Given a date range, retrieve SAP Concur expense reports, analyze them with Anthropic for policy violations, and open ServiceNow audit tasks for non-compliant items."
inputParameters:
- name: start_date
in: body
type: string
description: "Start date for expense report query in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "End date for expense report query in YYYY-MM-DD format."
steps:
- name: get-reports
type: call
call: concur.list-expense-reports
with:
startDate: "{{start_date}}"
endDate: "{{end_date}}"
- name: flag-violations
type: call
call: anthropic.analyze-expenses
with:
model: claude-opus-4-5
prompt: "Review these expense reports for Goldman Sachs policy violations: {{get-reports.reports}}"
- name: create-audit-task
type: call
call: servicenow.create-audit-task
with:
short_description: "Expense audit {{start_date}} to {{end_date}}"
description: "{{flag-violations.violations_summary}}"
consumes:
- type: http
namespace: concur
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: expense-reports
path: "/expense/reportdigests"
operations:
- name: list-expense-reports
method: GET
- type: http
namespace: anthropic
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: analyze-expenses
method: POST
- type: http
namespace: servicenow
baseUri: "https://goldmansachs.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: tasks
path: "/table/u_audit_task"
operations:
- name: create-audit-task
method: POST
Retrieves a SAP Concur travel request, validates it against Goldman Sachs travel policy using Anthropic, and routes it for approval in ServiceNow.
naftiko: "0.5"
info:
label: "SAP Concur Travel Request Processing"
description: "Retrieves a SAP Concur travel request, validates it against Goldman Sachs travel policy using Anthropic, and routes it for approval in ServiceNow."
tags:
- finance
- travel
- sap-concur
- anthropic
- servicenow
- approval
capability:
exposes:
- type: mcp
namespace: travel-ops
port: 8080
tools:
- name: process-travel-request
description: "Given a SAP Concur request ID, fetch details, analyze against travel policy with Anthropic, and create a ServiceNow approval task with compliance notes."
inputParameters:
- name: request_id
in: body
type: string
description: "The SAP Concur travel request ID to process."
steps:
- name: get-request
type: call
call: concur.get-travel-request
with:
request_id: "{{request_id}}"
- name: validate-policy
type: call
call: anthropic.validate-travel-policy
with:
model: claude-opus-4-5
prompt: "Review this Goldman Sachs travel request against company policy: {{get-request.details}}"
- name: create-approval
type: call
call: servicenow.create-approval
with:
short_description: "Travel approval: {{get-request.traveler_name}} to {{get-request.destination}}"
policy_notes: "{{validate-policy.compliance_notes}}"
consumes:
- type: http
namespace: concur
baseUri: "https://www.concursolutions.com/api/v3.0"
authentication:
type: bearer
token: "$secrets.concur_token"
resources:
- name: travel-requests
path: "/travelrequest/requests/{{request_id}}"
inputParameters:
- name: request_id
in: path
operations:
- name: get-travel-request
method: GET
- type: http
namespace: anthropic
baseUri: "https://api.anthropic.com/v1"
authentication:
type: apikey
key: "x-api-key"
value: "$secrets.anthropic_api_key"
placement: header
resources:
- name: messages
path: "/messages"
operations:
- name: validate-travel-policy
method: POST
- type: http
namespace: servicenow
baseUri: "https://goldmansachs.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: approvals
path: "/table/sysapproval_approver"
operations:
- name: create-approval
method: POST
Detects vulnerabilities in GitHub repos, prioritizes them via Datadog, and creates remediation tickets in ServiceNow.
naftiko: "0.5"
info:
label: "Security Vulnerability Remediation Pipeline"
description: "Detects vulnerabilities in GitHub repos, prioritizes them via Datadog, and creates remediation tickets in ServiceNow."
tags:
- security
- github
- datadog
- servicenow
capability:
exposes:
- type: mcp
namespace: vuln-remediation
port: 8080
tools:
- name: remediate-vulnerabilities
description: "Detect, prioritize, and track security vulnerability remediation."
inputParameters:
- name: repo
in: body
type: string
description: "GitHub repository name."
steps:
- name: scan-repo
type: call
call: "github-api.list-alerts"
with:
repo: "{{repo}}"
- name: get-impact
type: call
call: "datadog-api.query-metrics"
with:
query: "security.vulnerabilities{repo:{{repo}}}"
- name: create-tickets
type: call
call: "servicenow-api.create-incident"
with:
short_description: "Vulnerability remediation: {{repo}}"
description: "Critical: {{scan-repo.critical_count}}. High: {{scan-repo.high_count}}. Impact: {{get-impact.score}}."
priority: "2"
consumes:
- type: http
namespace: github-api
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: alerts
path: "/repos/goldman-sachs/{{repo}}/code-scanning/alerts"
inputParameters:
- name: repo
in: path
operations:
- name: list-alerts
method: GET
- type: http
namespace: datadog-api
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: metrics
path: "/query"
operations:
- name: query-metrics
method: GET
- type: http
namespace: servicenow-api
baseUri: "https://goldmansachs.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
Submits a ServiceNow change request for trading system infrastructure changes, routes it to the CAB, and notifies stakeholders via Microsoft Teams.
naftiko: "0.5"
info:
label: "ServiceNow Change Management for Trading Systems"
description: "Submits a ServiceNow change request for trading system infrastructure changes, routes it to the CAB, and notifies stakeholders via Microsoft Teams."
tags:
- itsm
- change-management
- servicenow
- microsoft-teams
- trading-infrastructure
capability:
exposes:
- type: mcp
namespace: change-mgmt
port: 8080
tools:
- name: submit-trading-change-request
description: "Given change details for a trading system modification, create a ServiceNow change request, assign to the trading CAB group, and notify approvers in Teams."
inputParameters:
- name: short_description
in: body
type: string
description: "Description of the trading system change being requested."
- name: change_type
in: body
type: string
description: "ServiceNow change type: normal, standard, or emergency."
- name: risk_level
in: body
type: string
description: "Risk level: low, medium, or high."
- name: approver_email
in: body
type: string
description: "Email of the primary change approver."
steps:
- name: create-change
type: call
call: servicenow.create-change-request
with:
short_description: "{{short_description}}"
type: "{{change_type}}"
risk: "{{risk_level}}"
assignment_group: "Trading_CAB"
- name: notify-approver
type: call
call: msteams.notify-approver
with:
recipient: "{{approver_email}}"
text: "Change request {{create-change.number}} awaiting your approval: {{short_description}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://goldmansachs.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: changes
path: "/table/change_request"
operations:
- name: create-change-request
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/users/{{recipient}}/sendMail"
inputParameters:
- name: recipient
in: path
operations:
- name: notify-approver
method: POST
Retrieves the priority and assignment details of a ServiceNow incident by number.
naftiko: "0.5"
info:
label: "ServiceNow Incident Priority Lookup"
description: "Retrieves the priority and assignment details of a ServiceNow incident by number."
tags:
- it-operations
- incident-management
- servicenow
capability:
exposes:
- type: mcp
namespace: incident-priority
port: 8080
tools:
- name: get-incident-priority
description: "Given a ServiceNow incident number, return the priority, state, and assigned group. Use when operations needs quick incident triage information."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number."
call: "servicenow-api.get-incident"
with:
incident_number: "{{incident_number}}"
outputParameters:
- name: priority
type: string
mapping: "$.result.priority"
- name: state
type: string
mapping: "$.result.state"
- name: assignment_group
type: string
mapping: "$.result.assignment_group.display_value"
consumes:
- type: http
namespace: servicenow-api
baseUri: "https://gs.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident/{{incident_number}}"
inputParameters:
- name: incident_number
in: path
operations:
- name: get-incident
method: GET
Retrieves the current status, priority, and assignment details of a ServiceNow incident for Goldman Sachs IT operations triage.
naftiko: "0.5"
info:
label: "ServiceNow Incident Status Lookup"
description: "Retrieves the current status, priority, and assignment details of a ServiceNow incident for Goldman Sachs IT operations triage."
tags:
- itsm
- servicenow
- incident-management
- lookup
capability:
exposes:
- type: mcp
namespace: incident-lookup
port: 8080
tools:
- name: get-incident-status
description: "Given a ServiceNow incident number, returns the current state, priority, and assigned group. Use for IT support inquiries."
inputParameters:
- name: incident_number
in: body
type: string
description: "The ServiceNow incident number (e.g., INC0012345)."
call: "servicenow-incidents.get-incident"
with:
number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result[0].state"
- name: priority
type: string
mapping: "$.result[0].priority"
consumes:
- type: http
namespace: servicenow-incidents
baseUri: "https://goldmansachs.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident"
inputParameters:
- name: number
in: query
operations:
- name: get-incident
method: GET
Searches SharePoint Online document libraries for policy or compliance documents by keyword.
naftiko: "0.5"
info:
label: "SharePoint Document Library Search"
description: "Searches SharePoint Online document libraries for policy or compliance documents by keyword."
tags:
- collaboration
- sharepoint
capability:
exposes:
- type: mcp
namespace: sharepoint
port: 8080
tools:
- name: search-documents
description: "Search for documents in SharePoint by keyword."
inputParameters:
- name: query
in: body
type: string
description: "Search keyword or phrase."
call: "sharepoint-api.search"
with:
query: "{{query}}"
consumes:
- type: http
namespace: sharepoint-api
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: search
path: "/search/query"
operations:
- name: search
method: POST
Queries Snowflake for the daily profit and loss summary for a given Goldman Sachs trading desk and date.
naftiko: "0.5"
info:
label: "Snowflake Daily PnL Report Lookup"
description: "Queries Snowflake for the daily profit and loss summary for a given Goldman Sachs trading desk and date."
tags:
- trading
- snowflake
- pnl
- reporting
capability:
exposes:
- type: mcp
namespace: pnl-report
port: 8080
tools:
- name: get-daily-pnl
description: "Given a trading desk code and date, returns the daily PnL summary from Snowflake. Use for end-of-day trading reviews."
inputParameters:
- name: desk_code
in: body
type: string
description: "The trading desk identifier code."
- name: report_date
in: body
type: string
description: "The report date in YYYY-MM-DD format."
call: "snowflake-pnl.query-pnl"
with:
desk: "{{desk_code}}"
date: "{{report_date}}"
outputParameters:
- name: total_pnl
type: number
mapping: "$.data[0].TOTAL_PNL"
- name: realized_pnl
type: number
mapping: "$.data[0].REALIZED_PNL"
consumes:
- type: http
namespace: snowflake-pnl
baseUri: "https://goldmansachs.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
inputParameters:
- name: desk
in: body
- name: date
in: body
operations:
- name: query-pnl
method: POST
Creates a Snowflake data share for a client, registers access in Okta, and notifies the client via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Snowflake Data Sharing Setup Pipeline"
description: "Creates a Snowflake data share for a client, registers access in Okta, and notifies the client via Microsoft Outlook."
tags:
- data-sharing
- snowflake
- okta
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: data-sharing
port: 8080
tools:
- name: setup-data-share
description: "Provision a Snowflake data share with access control and notification."
inputParameters:
- name: share_name
in: body
type: string
description: "Data share name."
- name: client_email
in: body
type: string
description: "Client email address."
- name: datasets
in: body
type: string
description: "Comma-separated dataset names."
steps:
- name: create-share
type: call
call: "snowflake-api.run-query"
with:
query: "CREATE SHARE IF NOT EXISTS {{share_name}}"
- name: grant-access
type: call
call: "okta-api.assign-app"
with:
login: "{{client_email}}"
app_id: "snowflake-data-share"
- name: notify-client
type: call
call: "outlook-api.send-mail"
with:
to: "{{client_email}}"
subject: "Data Share Ready: {{share_name}}"
body: "Your Snowflake data share {{share_name}} is now available. Datasets: {{datasets}}."
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://goldmansachs.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: okta-api
baseUri: "https://goldmansachs.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: apps
path: "/apps/{{app_id}}/users"
inputParameters:
- name: app_id
in: path
operations:
- name: assign-app
method: POST
- type: http
namespace: outlook-api
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-mail
method: POST
Detects ETL failures in Snowflake, restarts the pipeline via GitHub Actions, and logs the incident in ServiceNow.
naftiko: "0.5"
info:
label: "Snowflake ETL Failure Recovery Pipeline"
description: "Detects ETL failures in Snowflake, restarts the pipeline via GitHub Actions, and logs the incident in ServiceNow."
tags:
- data-engineering
- snowflake
- github-actions
- servicenow
capability:
exposes:
- type: mcp
namespace: etl-recovery
port: 8080
tools:
- name: recover-etl-pipeline
description: "Detect and recover from ETL pipeline failures."
inputParameters:
- name: pipeline_name
in: body
type: string
description: "ETL pipeline name."
- name: run_date
in: body
type: string
description: "Pipeline run date YYYY-MM-DD."
steps:
- name: check-status
type: call
call: "snowflake-api.run-query"
with:
query: "SELECT * FROM etl.pipeline_runs WHERE name = '{{pipeline_name}}' AND run_date = '{{run_date}}'"
- name: restart-pipeline
type: call
call: "github-api.dispatch-workflow"
with:
repo: "etl-pipelines"
workflow: "{{pipeline_name}}.yml"
ref: "main"
- name: log-incident
type: call
call: "servicenow-api.create-incident"
with:
short_description: "ETL failure: {{pipeline_name}} on {{run_date}}"
description: "Status: {{check-status.status}}. Restart workflow: {{restart-pipeline.id}}."
category: "data_engineering"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://goldmansachs.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: github-api
baseUri: "https://api.github.com"
authentication:
type: bearer
token: "$secrets.github_token"
resources:
- name: workflows
path: "/repos/goldman-sachs/{{repo}}/actions/workflows/{{workflow}}/dispatches"
inputParameters:
- name: repo
in: path
- name: workflow
in: path
operations:
- name: dispatch-workflow
method: POST
- type: http
namespace: servicenow-api
baseUri: "https://goldmansachs.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
Runs data quality validation queries on Snowflake financial data tables and posts completeness and anomaly results to the data engineering team in Teams.
naftiko: "0.5"
info:
label: "Snowflake Financial Data Quality Check"
description: "Runs data quality validation queries on Snowflake financial data tables and posts completeness and anomaly results to the data engineering team in Teams."
tags:
- data-analytics
- snowflake
- microsoft-teams
- data-quality
- finance
capability:
exposes:
- type: mcp
namespace: financial-data-ops
port: 8080
tools:
- name: run-financial-data-quality
description: "Given a Snowflake database and table name for financial data, execute a quality check query and post completeness and anomaly results to the data engineering Teams channel."
inputParameters:
- name: database
in: body
type: string
description: "The Snowflake database containing the financial data table."
- name: table_name
in: body
type: string
description: "The Snowflake table to run quality checks against."
steps:
- name: run-quality-check
type: call
call: snowflake.execute-statement
with:
database: "{{database}}"
statement: "SELECT COUNT(*) as total, COUNT_IF(trade_id IS NULL) as missing_ids, COUNT_IF(amount IS NULL) as missing_amounts FROM {{table_name}}"
- name: post-results
type: call
call: msteams.post-quality-results
with:
channel: "data-engineering"
text: "Data quality check on {{table_name}}: Total={{run-quality-check.total}}, Missing IDs={{run-quality-check.missing_ids}}, Missing Amounts={{run-quality-check.missing_amounts}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://goldmansachs.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: execute-statement
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/data-engineering/channels/general/messages"
operations:
- name: post-quality-results
method: POST
Queries Snowflake for profit and loss attribution data by desk and strategy for a specified trading date.
naftiko: "0.5"
info:
label: "Snowflake PnL Attribution Query"
description: "Queries Snowflake for profit and loss attribution data by desk and strategy for a specified trading date."
tags:
- trading
- analytics
- snowflake
capability:
exposes:
- type: mcp
namespace: pnl-attribution
port: 8080
tools:
- name: query-pnl
description: "Given a trading desk and date, return the PnL breakdown by strategy. Use when risk managers need daily PnL attribution reports."
inputParameters:
- name: desk
in: body
type: string
description: "The trading desk identifier."
- name: trade_date
in: body
type: string
description: "The trade date in YYYY-MM-DD format."
call: "snowflake-api.run-pnl-query"
with:
desk: "{{desk}}"
trade_date: "{{trade_date}}"
outputParameters:
- name: total_pnl
type: number
mapping: "$.data[0].total_pnl"
- name: strategy_count
type: integer
mapping: "$.data[0].strategy_count"
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://gs-analytics.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: statements
path: "/statements"
operations:
- name: run-pnl-query
method: POST
Monitors Snowflake pipeline task execution for risk data feeds, raises Datadog alerts on failures, and creates Jira incidents for the data engineering team.
naftiko: "0.5"
info:
label: "Snowflake Risk Data Pipeline Health Check"
description: "Monitors Snowflake pipeline task execution for risk data feeds, raises Datadog alerts on failures, and creates Jira incidents for the data engineering team."
tags:
- data-analytics
- snowflake
- datadog
- jira
- risk-management
capability:
exposes:
- type: mcp
namespace: data-ops
port: 8080
tools:
- name: monitor-risk-pipeline
description: "Given a Snowflake task name for a risk data pipeline, check execution history, raise a Datadog alert on failure, and create a Jira incident for remediation."
inputParameters:
- name: task_name
in: body
type: string
description: "The Snowflake task name to check, e.g. RISK_VAR_DAILY."
- name: database
in: body
type: string
description: "The Snowflake database containing the pipeline task."
steps:
- name: get-task-history
type: call
call: snowflake.get-task-history
with:
task_name: "{{task_name}}"
database: "{{database}}"
- name: raise-dd-alert
type: call
call: datadog.create-event
with:
title: "Risk pipeline failure: {{task_name}}"
text: "Task {{task_name}} state: {{get-task-history.last_run_state}}"
alert_type: "error"
- name: open-jira-incident
type: call
call: jira.create-data-incident
with:
project_key: "DATA"
summary: "Risk pipeline failure: {{task_name}}"
description: "Database: {{database}}\nState: {{get-task-history.last_run_state}}"
consumes:
- type: http
namespace: snowflake
baseUri: "https://goldmansachs.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: task-history
path: "/databases/{{database}}/schemas/RISK/tasks/{{task_name}}/executeHistory"
inputParameters:
- name: database
in: path
- name: task_name
in: path
operations:
- name: get-task-history
method: GET
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "DD-API-KEY"
value: "$secrets.datadog_api_key"
placement: header
resources:
- name: events
path: "/events"
operations:
- name: create-event
method: POST
- type: http
namespace: jira
baseUri: "https://goldmansachs.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-data-incident
method: POST
Polls SolarWinds for degraded network nodes, creates ServiceNow incidents, and notifies network ops via Microsoft Teams.
naftiko: "0.5"
info:
label: "SolarWinds Network Health to ServiceNow"
description: "Polls SolarWinds for degraded network nodes, creates ServiceNow incidents, and notifies network ops via Microsoft Teams."
tags:
- networking
- solarwinds
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: solarwinds-health
port: 8080
tools:
- name: report-network-degradation
description: "Detect degraded network nodes and create incident tickets."
inputParameters:
- name: node_id
in: body
type: string
description: "SolarWinds node identifier."
steps:
- name: get-node
type: call
call: "solarwinds-api.get-node-status"
with:
node_id: "{{node_id}}"
- name: create-incident
type: call
call: "servicenow-api.create-incident"
with:
short_description: "Network degradation: {{get-node.name}}"
description: "Status: {{get-node.status}}. CPU: {{get-node.cpu_pct}}%. Memory: {{get-node.memory_pct}}%."
priority: "2"
- name: notify-ops
type: call
call: "msteams-api.post-message"
with:
team_id: "network-ops"
channel_id: "alerts"
message: "Network node {{get-node.name}} degraded. Incident: {{create-incident.number}}."
consumes:
- type: http
namespace: solarwinds-api
baseUri: "https://solarwinds.goldmansachs.com/SolarWinds/InformationService/v3/Json"
authentication:
type: basic
username: "$secrets.solarwinds_user"
password: "$secrets.solarwinds_password"
resources:
- name: nodes
path: "/Query"
operations:
- name: get-node-status
method: GET
- type: http
namespace: servicenow-api
baseUri: "https://goldmansachs.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams-api
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_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: post-message
method: POST
Checks the refresh status of a Tableau workbook to confirm that the latest financial data is available for analysts.
naftiko: "0.5"
info:
label: "Tableau Report Status Check"
description: "Checks the refresh status of a Tableau workbook to confirm that the latest financial data is available for analysts."
tags:
- reporting
- tableau
capability:
exposes:
- type: mcp
namespace: tableau
port: 8080
tools:
- name: get-workbook-status
description: "Return the last refresh time and status for a given Tableau workbook."
inputParameters:
- name: workbook_id
in: body
type: string
description: "Tableau workbook identifier."
call: "tableau-api.get-workbook"
with:
workbook_id: "{{workbook_id}}"
consumes:
- type: http
namespace: tableau-api
baseUri: "https://tableau.goldmansachs.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: workbooks
path: "/sites/default/workbooks/{{workbook_id}}"
inputParameters:
- name: workbook_id
in: path
operations:
- name: get-workbook
method: GET
Validates a proposed trade against compliance rules in Snowflake, checks market conditions via Bloomberg, and logs the decision in Jira.
naftiko: "0.5"
info:
label: "Trade Execution Compliance Check"
description: "Validates a proposed trade against compliance rules in Snowflake, checks market conditions via Bloomberg, and logs the decision in Jira."
tags:
- compliance
- trading
- snowflake
- bloomberg-enterprise-data
- jira
capability:
exposes:
- type: mcp
namespace: trade-compliance
port: 8080
tools:
- name: check-trade-compliance
description: "Validate trade compliance and log the outcome."
inputParameters:
- name: trade_id
in: body
type: string
description: "Internal trade identifier."
- name: instrument
in: body
type: string
description: "Instrument ticker."
steps:
- name: compliance-rules
type: call
call: "snowflake-api.run-query"
with:
query: "SELECT * FROM compliance.rules WHERE instrument = '{{instrument}}'"
- name: market-check
type: call
call: "bloomberg-api.get-quote"
with:
ticker: "{{instrument}}"
- name: log-decision
type: call
call: "jira-api.create-issue"
with:
project: "COMPLIANCE"
summary: "Trade {{trade_id}} compliance review"
description: "Instrument: {{instrument}}. Price: {{market-check.last_price}}. Rules matched: {{compliance-rules.count}}."
consumes:
- type: http
namespace: snowflake-api
baseUri: "https://goldmansachs.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: bloomberg-api
baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/datasets"
authentication:
type: bearer
token: "$secrets.bloomberg_token"
resources:
- name: quotes
path: "/quotes/{{ticker}}"
inputParameters:
- name: ticker
in: path
operations:
- name: get-quote
method: GET
- type: http
namespace: jira-api
baseUri: "https://goldmansachs.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_password"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Retrieves indicative bond pricing from the Tradeweb platform for fixed-income trading desks.
naftiko: "0.5"
info:
label: "Tradeweb Bond Price Lookup"
description: "Retrieves indicative bond pricing from the Tradeweb platform for fixed-income trading desks."
tags:
- trading
- tradeweb
capability:
exposes:
- type: mcp
namespace: tradeweb
port: 8080
tools:
- name: get-bond-price
description: "Fetch indicative price for a bond by ISIN."
inputParameters:
- name: isin
in: body
type: string
description: "Bond ISIN identifier."
call: "tradeweb-api.get-price"
with:
isin: "{{isin}}"
consumes:
- type: http
namespace: tradeweb-api
baseUri: "https://api.tradeweb.com/v1"
authentication:
type: bearer
token: "$secrets.tradeweb_token"
resources:
- name: prices
path: "/bonds/{{isin}}/price"
inputParameters:
- name: isin
in: path
operations:
- name: get-price
method: GET
Retrieves vendor details from SAP Ariba, runs a security scan via Palo Alto Networks, and tracks findings in ServiceNow.
naftiko: "0.5"
info:
label: "Vendor Security Assessment Workflow"
description: "Retrieves vendor details from SAP Ariba, runs a security scan via Palo Alto Networks, and tracks findings in ServiceNow."
tags:
- security
- sap-ariba
- palo-alto-networks
- servicenow
capability:
exposes:
- type: mcp
namespace: vendor-security
port: 8080
tools:
- name: assess-vendor-security
description: "Orchestrate vendor security due diligence."
inputParameters:
- name: vendor_id
in: body
type: string
description: "SAP Ariba vendor ID."
steps:
- name: get-vendor
type: call
call: "ariba-api.get-vendor"
with:
vendor_id: "{{vendor_id}}"
- name: scan-domain
type: call
call: "paloalto-api.url-lookup"
with:
url: "{{get-vendor.website}}"
- name: create-finding
type: call
call: "servicenow-api.create-incident"
with:
short_description: "Security assessment: {{get-vendor.name}}"
description: "Domain risk: {{scan-domain.risk_score}}. Category: {{scan-domain.category}}."
category: "vendor_security"
consumes:
- type: http
namespace: ariba-api
baseUri: "https://openapi.ariba.com/api/sourcing-projects/v1"
authentication:
type: bearer
token: "$secrets.ariba_token"
resources:
- name: vendors
path: "/vendors/{{vendor_id}}"
inputParameters:
- name: vendor_id
in: path
operations:
- name: get-vendor
method: GET
- type: http
namespace: paloalto-api
baseUri: "https://urlfiltering.paloaltonetworks.com/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.paloalto_api_key"
placement: header
resources:
- name: urls
path: "/url-info"
operations:
- name: url-lookup
method: POST
- type: http
namespace: servicenow-api
baseUri: "https://goldmansachs.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
Triggers open enrollment in Workday, sends notifications via Microsoft Teams, and tracks completion in Jira.
naftiko: "0.5"
info:
label: "Workday Benefits Enrollment Orchestrator"
description: "Triggers open enrollment in Workday, sends notifications via Microsoft Teams, and tracks completion in Jira."
tags:
- hr
- workday
- microsoft-teams
- jira
capability:
exposes:
- type: mcp
namespace: benefits-enrollment
port: 8080
tools:
- name: run-benefits-enrollment
description: "Orchestrate the annual benefits enrollment process."
inputParameters:
- name: enrollment_period
in: body
type: string
description: "Enrollment period ID."
- name: department
in: body
type: string
description: "Target department code."
steps:
- name: open-enrollment
type: call
call: "workday-api.trigger-enrollment"
with:
period: "{{enrollment_period}}"
department: "{{department}}"
- name: notify-employees
type: call
call: "msteams-api.post-message"
with:
team_id: "hr-team"
channel_id: "benefits"
message: "Open enrollment has begun for {{department}}. Period: {{enrollment_period}}. Eligible: {{open-enrollment.eligible_count}} employees."
- name: track-progress
type: call
call: "jira-api.create-issue"
with:
project: "HR"
summary: "Benefits enrollment: {{department}} - {{enrollment_period}}"
description: "Eligible: {{open-enrollment.eligible_count}}. Deadline: {{open-enrollment.deadline}}."
consumes:
- type: http
namespace: workday-api
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: enrollment
path: "/goldman-sachs/benefits/enrollment"
operations:
- name: trigger-enrollment
method: POST
- type: http
namespace: msteams-api
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_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: post-message
method: POST
- type: http
namespace: jira-api
baseUri: "https://goldmansachs.atlassian.net/rest/api/3"
authentication:
type: basic
username: "$secrets.jira_user"
password: "$secrets.jira_password"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Extracts compensation data from Workday, compares against market benchmarks in Snowflake, and generates a report in Power BI.
naftiko: "0.5"
info:
label: "Workday Compensation Review Pipeline"
description: "Extracts compensation data from Workday, compares against market benchmarks in Snowflake, and generates a report in Power BI."
tags:
- hr
- workday
- snowflake
- power-bi
capability:
exposes:
- type: mcp
namespace: comp-review
port: 8080
tools:
- name: run-compensation-review
description: "Compare compensation to benchmarks and generate a review report."
inputParameters:
- name: department
in: body
type: string
description: "Workday department code."
- name: review_cycle
in: body
type: string
description: "Review cycle identifier."
steps:
- name: get-comp-data
type: call
call: "workday-api.get-compensation"
with:
department: "{{department}}"
- name: get-benchmarks
type: call
call: "snowflake-api.run-query"
with:
query: "SELECT * FROM hr.market_benchmarks WHERE department = '{{department}}'"
- name: refresh-report
type: call
call: "powerbi-api.refresh-dataset"
with:
dataset_id: "comp-review-{{review_cycle}}"
consumes:
- type: http
namespace: workday-api
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: compensation
path: "/goldman-sachs/compensation"
operations:
- name: get-compensation
method: GET
- type: http
namespace: snowflake-api
baseUri: "https://goldmansachs.snowflakecomputing.com/api/v2"
authentication:
type: bearer
token: "$secrets.snowflake_token"
resources:
- name: queries
path: "/statements"
operations:
- name: run-query
method: POST
- type: http
namespace: powerbi-api
baseUri: "https://api.powerbi.com/v1.0/myorg"
authentication:
type: bearer
token: "$secrets.powerbi_token"
resources:
- name: datasets
path: "/datasets/{{dataset_id}}/refreshes"
inputParameters:
- name: dataset_id
in: path
operations:
- name: refresh-dataset
method: POST
Retrieves employee directory information from Workday by employee ID including department, manager, and contact details.
naftiko: "0.5"
info:
label: "Workday Employee Directory Lookup"
description: "Retrieves employee directory information from Workday by employee ID including department, manager, and contact details."
tags:
- hr
- directory
- workday
capability:
exposes:
- type: mcp
namespace: employee-directory
port: 8080
tools:
- name: lookup-employee
description: "Given a Workday employee ID, return their profile information. Use when HR or managers need to look up employee details."
inputParameters:
- name: employee_id
in: body
type: string
description: "The Workday employee ID."
call: "workday-api.get-worker"
with:
employee_id: "{{employee_id}}"
outputParameters:
- name: full_name
type: string
mapping: "$.worker.full_name"
- name: department
type: string
mapping: "$.worker.department"
- name: manager
type: string
mapping: "$.worker.manager_name"
- name: email
type: string
mapping: "$.worker.work_email"
consumes:
- type: http
namespace: workday-api
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/gs/workers/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-worker
method: GET
Pulls current headcount by division and compensation band from Workday for finance and HR planning.
naftiko: "0.5"
info:
label: "Workday Headcount and Compensation Snapshot"
description: "Pulls current headcount by division and compensation band from Workday for finance and HR planning."
tags:
- hr
- finance
- workday
- reporting
- headcount
capability:
exposes:
- type: mcp
namespace: hr-reporting
port: 8080
tools:
- name: get-headcount-snapshot
description: "Returns active employees grouped by division and cost center with employment type and compensation band from Workday. Use for workforce planning."
call: workday.headcount-export
outputParameters:
- name: employees
type: array
mapping: "$.data"
items:
- name: employee_id
type: string
mapping: "$.id"
- name: full_name
type: string
mapping: "$.displayName"
- name: division
type: string
mapping: "$.businessUnit"
- name: cost_center
type: string
mapping: "$.costCenter"
- name: comp_band
type: string
mapping: "$.compensationGrade"
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/goldman-sachs/workers"
operations:
- name: headcount-export
method: GET
Initiates the annual performance review cycle in Workday and sends manager notifications via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workday Performance Review Cycle Launcher"
description: "Initiates the annual performance review cycle in Workday and sends manager notifications via Microsoft Teams."
tags:
- hr
- performance-management
- workday
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-performance
port: 8080
tools:
- name: launch-review-cycle
description: "Given a review cycle name and due date, create performance review tasks in Workday and broadcast a manager notification to the people managers Teams channel."
inputParameters:
- name: cycle_name
in: body
type: string
description: "The performance review cycle name, e.g. 2026 Annual Review."
- name: due_date
in: body
type: string
description: "Completion due date in YYYY-MM-DD format."
steps:
- name: create-review-cycle
type: call
call: workday.create-review-event
with:
cycle_name: "{{cycle_name}}"
due_date: "{{due_date}}"
- name: notify-managers
type: call
call: msteams.broadcast-review
with:
channel: "people-managers"
text: "Performance review cycle '{{cycle_name}}' is now open. Due: {{due_date}}."
consumes:
- type: http
namespace: workday
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: review-events
path: "/goldman-sachs/performanceReviews"
operations:
- name: create-review-event
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: messages
path: "/teams/hr/channels/managers/messages"
operations:
- name: broadcast-review
method: POST
When an employee changes role in Workday, updates their Okta group memberships to reflect the new job function.
naftiko: "0.5"
info:
label: "Workday Role Change and Okta Access Sync"
description: "When an employee changes role in Workday, updates their Okta group memberships to reflect the new job function."
tags:
- hr
- identity
- workday
- okta
- access-management
capability:
exposes:
- type: mcp
namespace: hr-access
port: 8080
tools:
- name: sync-role-change
description: "Given a Workday employee ID, new Okta group ID, and old group ID, reassign the employee's Okta group memberships to reflect their new role."
inputParameters:
- name: okta_user_id
in: body
type: string
description: "The Okta user ID to reassign groups for."
- name: old_group_id
in: body
type: string
description: "The Okta group ID to remove the user from."
- name: new_group_id
in: body
type: string
description: "The Okta group ID to add the user to."
steps:
- name: remove-old-group
type: call
call: okta.remove-user-from-group
with:
user_id: "{{okta_user_id}}"
group_id: "{{old_group_id}}"
- name: add-new-group
type: call
call: okta-assign.add-user-to-group
with:
user_id: "{{okta_user_id}}"
group_id: "{{new_group_id}}"
consumes:
- type: http
namespace: okta
baseUri: "https://goldmansachs.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: group-members
path: "/groups/{{group_id}}/users/{{user_id}}"
inputParameters:
- name: group_id
in: path
- name: user_id
in: path
operations:
- name: remove-user-from-group
method: DELETE
- type: http
namespace: okta-assign
baseUri: "https://goldmansachs.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: group-members
path: "/groups/{{group_id}}/users/{{user_id}}"
inputParameters:
- name: group_id
in: path
- name: user_id
in: path
operations:
- name: add-user-to-group
method: PUT
Processes employee termination in Workday, revokes all Okta application access, and archives documents in Google Drive.
naftiko: "0.5"
info:
label: "Workday Termination Offboarding Chain"
description: "Processes employee termination in Workday, revokes all Okta application access, and archives documents in Google Drive."
tags:
- hr
- workday
- okta
- google-drive
capability:
exposes:
- type: mcp
namespace: termination-offboarding
port: 8080
tools:
- name: process-termination
description: "Orchestrate employee termination including access revocation and archival."
inputParameters:
- name: worker_id
in: body
type: string
description: "Workday worker ID."
- name: termination_date
in: body
type: string
description: "Termination date YYYY-MM-DD."
steps:
- name: get-employee
type: call
call: "workday-api.get-worker"
with:
worker_id: "{{worker_id}}"
- name: revoke-access
type: call
call: "okta-api.deactivate-user"
with:
login: "{{get-employee.work_email}}"
- name: archive-docs
type: call
call: "gdrive-api.move-file"
with:
file_id: "{{get-employee.drive_folder_id}}"
destination: "archived-employees/{{worker_id}}"
consumes:
- type: http
namespace: workday-api
baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
authentication:
type: bearer
token: "$secrets.workday_token"
resources:
- name: workers
path: "/goldman-sachs/workers/{{worker_id}}"
inputParameters:
- name: worker_id
in: path
operations:
- name: get-worker
method: GET
- type: http
namespace: okta-api
baseUri: "https://goldmansachs.okta.com/api/v1"
authentication:
type: apikey
key: "Authorization"
value: "$secrets.okta_api_token"
placement: header
resources:
- name: users
path: "/users/{{login}}/lifecycle/deactivate"
inputParameters:
- name: login
in: path
operations:
- name: deactivate-user
method: POST
- type: http
namespace: gdrive-api
baseUri: "https://www.googleapis.com/drive/v3"
authentication:
type: bearer
token: "$secrets.google_drive_token"
resources:
- name: files
path: "/files/{{file_id}}"
inputParameters:
- name: file_id
in: path
operations:
- name: move-file
method: PATCH
Retrieves company firmographic data from ZoomInfo to enrich CRM records for business development.
naftiko: "0.5"
info:
label: "ZoomInfo Company Enrichment Lookup"
description: "Retrieves company firmographic data from ZoomInfo to enrich CRM records for business development."
tags:
- data-enrichment
- zoominfo
capability:
exposes:
- type: mcp
namespace: zoominfo
port: 8080
tools:
- name: get-company-info
description: "Look up company firmographics by domain name."
inputParameters:
- name: domain
in: body
type: string
description: "Company website domain."
call: "zoominfo-api.enrich-company"
with:
domain: "{{domain}}"
consumes:
- type: http
namespace: zoominfo-api
baseUri: "https://api.zoominfo.com"
authentication:
type: bearer
token: "$secrets.zoominfo_token"
resources:
- name: companies
path: "/enrich/company"
operations:
- name: enrich-company
method: POST