Capital One Capabilities

Naftiko 0.5 capability definitions for Capital One - 100 capabilities showing integration workflows and service orchestrations.

Sort
Expand

Queries ADP Workforce Now for payroll-active employees by legal entity and department, returning headcount and total base salary for finance period-close reporting.

naftiko: "0.5"
info:
  label: "ADP Payroll Headcount Snapshot"
  description: "Queries ADP Workforce Now for payroll-active employees by legal entity and department, returning headcount and total base salary for finance period-close reporting."
  tags:
    - hr
    - finance
    - adp
    - payroll
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: payroll-reporting
      port: 8080
      tools:
        - name: get-payroll-headcount
          description: "Given an ADP legal entity code and department, return total payroll headcount and aggregate base salary. Use for period-close financial reporting and workforce cost analysis."
          inputParameters:
            - name: legal_entity_code
              in: body
              type: string
              description: "The ADP legal entity code for the reporting entity."
            - name: department
              in: body
              type: string
              description: "Optional department filter for headcount data."
          call: "adp.get-payroll-employees"
          with:
            legalEntityCode: "{{legal_entity_code}}"
            department: "{{department}}"
          outputParameters:
            - name: headcount
              type: integer
              mapping: "$.data.totalEmployees"
            - name: total_salary
              type: number
              mapping: "$.data.totalBaseSalary"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com"
      authentication:
        type: bearer
        token: "$secrets.adp_token"
      resources:
        - name: payroll-employees
          path: "/hr/v2/workers"
          inputParameters:
            - name: legalEntityCode
              in: query
            - name: department
              in: query
          operations:
            - name: get-payroll-employees
              method: GET

Retrieves payroll summary data from ADP for a pay period.

naftiko: "0.5"
info:
  label: "ADP Payroll Summary Lookup"
  description: "Retrieves payroll summary data from ADP for a pay period."
  tags:
    - hr
    - adp
capability:
  exposes:
    - type: mcp
      namespace: payroll-info
      port: 8080
      tools:
        - name: get-payroll-summary
          description: "Look up ADP payroll summary."
          inputParameters:
            - name: pay_period
              in: body
              type: string
              description: "Pay period identifier."
          call: "adp.get-payroll"
          with:
            pay_period: "{{pay_period}}"
          outputParameters:
            - name: total_gross
              type: number
              mapping: "$.payrollSummary.totalGross"
            - name: headcount
              type: number
              mapping: "$.payrollSummary.employeeCount"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token"
      resources:
        - name: payroll
          path: "/payroll/pay-periods/{{pay_period}}/summary"
          inputParameters:
            - name: pay_period
              in: path
          operations:
            - name: get-payroll
              method: GET

Checks the execution status of an Amazon Redshift query.

naftiko: "0.5"
info:
  label: "Amazon Redshift Query Status Lookup"
  description: "Checks the execution status of an Amazon Redshift query."
  tags:
    - data
    - amazon-redshift
capability:
  exposes:
    - type: mcp
      namespace: redshift-ops
      port: 8080
      tools:
        - name: get-query-status
          description: "Look up Redshift query status."
          inputParameters:
            - name: query_id
              in: body
              type: string
              description: "Redshift query ID."
          call: "redshift.get-statement"
          with:
            query_id: "{{query_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.Status"
            - name: rows_affected
              type: number
              mapping: "$.ResultRows"
  consumes:
    - type: http
      namespace: redshift
      baseUri: "https://redshift-data.us-east-1.amazonaws.com"
      authentication:
        type: bearer
        token: "$secrets.aws_redshift_token"
      resources:
        - name: statements
          path: "/"
          operations:
            - name: get-statement
              method: POST

Processes AML alerts by enriching with Snowflake data, creating ServiceNow cases, and notifying compliance via Slack.

naftiko: "0.5"
info:
  label: "Anti-Money Laundering Alert Orchestrator"
  description: "Processes AML alerts by enriching with Snowflake data, creating ServiceNow cases, and notifying compliance via Slack."
  tags:
    - compliance
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: anti-money-laundering-alert
      port: 8080
      tools:
        - name: anti-money-laundering-alert
          description: "Processes AML alerts by enriching with Snowflake data."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                entity_id: "{{entity_id}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Anti-Money Laundering Alert for {{entity_id}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#ops"
                text: "Anti-Money Laundering Alert processed for {{entity_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://capitalone.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
            - name: run-analysis
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.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
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Monitors API gateway metrics via Datadog, adjusts rate limits, and notifies developers via Slack.

naftiko: "0.5"
info:
  label: "API Gateway Rate Limit Orchestrator"
  description: "Monitors API gateway metrics via Datadog, adjusts rate limits, and notifies developers via Slack."
  tags:
    - infrastructure
    - datadog
    - slack
capability:
  exposes:
    - type: mcp
      namespace: api-gateway-rate-limit
      port: 8080
      tools:
        - name: api-gateway-rate-limit
          description: "Monitors API gateway metrics via Datadog."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: check-metrics
              type: call
              call: "datadog.get-monitors"
              with:
                entity_id: "{{entity_id}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#ops"
                text: "API Gateway Rate Limit processed for {{entity_id}}"
  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"
          operations:
            - name: get-monitors
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Maps application dependencies from ServiceNow CMDB, validates in Datadog, and publishes to Confluence.

naftiko: "0.5"
info:
  label: "Application Dependency Mapping Orchestrator"
  description: "Maps application dependencies from ServiceNow CMDB, validates in Datadog, and publishes to Confluence."
  tags:
    - infrastructure
    - servicenow
    - datadog
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: application-dependency-mapping
      port: 8080
      tools:
        - name: application-dependency-mapping
          description: "Maps application dependencies from ServiceNow CMDB."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: check-metrics
              type: call
              call: "datadog.get-monitors"
              with:
                entity_id: "{{entity_id}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Application Dependency Mapping for {{entity_id}}"
            - name: publish
              type: call
              call: "confluence.create-page"
              with:
                space_key: "OPS"
                title: "Application Dependency Mapping"
  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"
          operations:
            - name: get-monitors
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.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
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://capitalone.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST

Processes penetration test findings, creates Jira remediation tickets, and notifies security team via Slack.

naftiko: "0.5"
info:
  label: "Automated Pen Test Findings Orchestrator"
  description: "Processes penetration test findings, creates Jira remediation tickets, and notifies security team via Slack."
  tags:
    - security
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: automated-pen-test-findings
      port: 8080
      tools:
        - name: automated-pen-test-findings
          description: "Processes penetration test findings."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: create-issue
              type: call
              call: "jira.create-issue"
              with:
                project: "OPS"
                summary: "Automated Pen Test Findings - {{entity_id}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#ops"
                text: "Automated Pen Test Findings processed for {{entity_id}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://capitalone.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Queries AWS Cost Explorer for spend anomalies exceeding a daily threshold and notifies the FinOps team via Microsoft Teams with a Jira cost review ticket.

naftiko: "0.5"
info:
  label: "AWS Cloud Cost Anomaly Responder"
  description: "Queries AWS Cost Explorer for spend anomalies exceeding a daily threshold and notifies the FinOps team via Microsoft Teams with a Jira cost review ticket."
  tags:
    - cloud
    - aws
    - finops
    - cost-management
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: cloud-finops
      port: 8080
      tools:
        - name: respond-to-aws-cost-anomaly
          description: "Given a cost threshold in USD and a date range, check AWS Cost Explorer for anomalies and create a Jira ticket and Teams alert if thresholds are exceeded. Use for daily FinOps monitoring."
          inputParameters:
            - name: threshold_usd
              in: body
              type: number
              description: "Daily spend threshold in USD that triggers an alert when exceeded."
            - name: start_date
              in: body
              type: string
              description: "Start date for cost query in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "End date for cost query in YYYY-MM-DD format."
            - name: finops_email
              in: body
              type: string
              description: "FinOps team email for Teams notification."
          steps:
            - name: get-cost-anomaly
              type: call
              call: "aws-cost.get-cost-and-usage"
              with:
                startDate: "{{start_date}}"
                endDate: "{{end_date}}"
            - name: create-jira-cost-ticket
              type: call
              call: "jira-finops.create-issue"
              with:
                summary: "AWS cost anomaly: ${{get-cost-anomaly.totalCost}} exceeds threshold ${{threshold_usd}}"
                description: "Cost spike detected between {{start_date}} and {{end_date}}."
                project: "FINOPS"
                issuetype: "Task"
            - name: notify-finops
              type: call
              call: "msteams-cost.send-message"
              with:
                recipient: "{{finops_email}}"
                message: "AWS cost anomaly detected: ${{get-cost-anomaly.totalCost}}. Jira: {{create-jira-cost-ticket.issueKey}}."
  consumes:
    - type: http
      namespace: aws-cost
      baseUri: "https://ce.us-east-1.amazonaws.com"
      authentication:
        type: bearer
        token: "$secrets.aws_cost_token"
      resources:
        - name: cost-and-usage
          path: "/getCostAndUsage"
          inputParameters:
            - name: startDate
              in: body
            - name: endDate
              in: body
          operations:
            - name: get-cost-and-usage
              method: POST
    - type: http
      namespace: jira-finops
      baseUri: "https://capitalone.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_token"
      resources:
        - name: issue
          path: "/issue"
          inputParameters:
            - name: summary
              in: body
            - name: description
              in: body
            - name: project
              in: body
            - name: issuetype
              in: body
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams-cost
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: send-mail
          path: "/users/{recipient}/sendMail"
          inputParameters:
            - name: recipient
              in: path
            - name: message
              in: body
          operations:
            - name: send-message
              method: POST

Retrieves AWS cost data, allocates to business units in Snowflake, and publishes reports to Google Sheets.

naftiko: "0.5"
info:
  label: "AWS Cost Allocation Orchestrator"
  description: "Retrieves AWS cost data, allocates to business units in Snowflake, and publishes reports to Google Sheets."
  tags:
    - finops
    - aws
    - snowflake
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: aws-cost-allocation
      port: 8080
      tools:
        - name: aws-cost-allocation
          description: "Retrieves AWS cost data."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                entity_id: "{{entity_id}}"
            - name: get-resources
              type: call
              call: "aws.list-resources"
              with:
                entity_id: "{{entity_id}}"
            - name: update-sheet
              type: call
              call: "sheets.update-spreadsheet"
              with:
                spreadsheet_id: "report"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://capitalone.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
            - name: run-analysis
              method: POST
    - type: http
      namespace: aws
      baseUri: "https://ec2.us-east-1.amazonaws.com"
      authentication:
        type: bearer
        token: "$secrets.aws_token"
      resources:
        - name: resources
          path: "/"
          operations:
            - name: list-resources
              method: GET
    - type: http
      namespace: sheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets/{{spreadsheet_id}}/values:batchUpdate"
          operations:
            - name: update-spreadsheet
              method: POST

Retrieves execution metrics for an AWS Lambda function.

naftiko: "0.5"
info:
  label: "AWS Lambda Function Status Lookup"
  description: "Retrieves execution metrics for an AWS Lambda function."
  tags:
    - cloud
    - aws-lambda
capability:
  exposes:
    - type: mcp
      namespace: lambda-ops
      port: 8080
      tools:
        - name: get-lambda-status
          description: "Look up Lambda function metrics."
          inputParameters:
            - name: function_name
              in: body
              type: string
              description: "Lambda function name."
          call: "lambda.get-function"
          with:
            function_name: "{{function_name}}"
          outputParameters:
            - name: last_invocation
              type: string
              mapping: "$.Configuration.LastModified"
            - name: state
              type: string
              mapping: "$.Configuration.State"
  consumes:
    - type: http
      namespace: lambda
      baseUri: "https://lambda.us-east-1.amazonaws.com"
      authentication:
        type: bearer
        token: "$secrets.aws_lambda_token"
      resources:
        - name: functions
          path: "/2015-03-31/functions/{{function_name}}"
          inputParameters:
            - name: function_name
              in: path
          operations:
            - name: get-function
              method: GET

Audits AWS security groups, identifies overly permissive rules, and creates Jira remediation tickets.

naftiko: "0.5"
info:
  label: "AWS Security Group Audit Orchestrator"
  description: "Audits AWS security groups, identifies overly permissive rules, and creates Jira remediation tickets."
  tags:
    - security
    - aws
    - jira
capability:
  exposes:
    - type: mcp
      namespace: aws-security-group-audit
      port: 8080
      tools:
        - name: aws-security-group-audit
          description: "Audits AWS security groups."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: create-issue
              type: call
              call: "jira.create-issue"
              with:
                project: "OPS"
                summary: "AWS Security Group Audit - {{entity_id}}"
            - name: get-resources
              type: call
              call: "aws.list-resources"
              with:
                entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://capitalone.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: aws
      baseUri: "https://ec2.us-east-1.amazonaws.com"
      authentication:
        type: bearer
        token: "$secrets.aws_token"
      resources:
        - name: resources
          path: "/"
          operations:
            - name: list-resources
              method: GET

Queries Microsoft Graph for users in a given security group, cross-references with Workday to identify terminated employees, and disables stale accounts to enforce access recertification.

naftiko: "0.5"
info:
  label: "Azure AD Access Recertification"
  description: "Queries Microsoft Graph for users in a given security group, cross-references with Workday to identify terminated employees, and disables stale accounts to enforce access recertification."
  tags:
    - identity
    - security
    - microsoft-graph
    - workday
    - access-management
capability:
  exposes:
    - type: mcp
      namespace: identity-ops
      port: 8080
      tools:
        - name: recertify-group-access
          description: "Given an Azure AD group ID, list all members, check each against Workday for active status, and disable accounts for terminated employees. Use for quarterly access recertification campaigns."
          inputParameters:
            - name: group_id
              in: body
              type: string
              description: "The Azure AD security group object ID to recertify."
          steps:
            - name: get-group-members
              type: call
              call: "msgraph-id.get-group-members"
              with:
                groupId: "{{group_id}}"
            - name: check-workday-status
              type: call
              call: "workday-id.get-worker-status"
              with:
                email: "{{get-group-members.userPrincipalName}}"
            - name: disable-stale-account
              type: call
              call: "msgraph-disable.disable-user"
              with:
                userPrincipalName: "{{get-group-members.userPrincipalName}}"
                accountEnabled: "false"
  consumes:
    - type: http
      namespace: msgraph-id
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: group-members
          path: "/groups/{groupId}/members"
          inputParameters:
            - name: groupId
              in: path
          operations:
            - name: get-group-members
              method: GET
    - type: http
      namespace: workday-id
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: worker-status
          path: "/workers"
          inputParameters:
            - name: email
              in: query
          operations:
            - name: get-worker-status
              method: GET
    - type: http
      namespace: msgraph-disable
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: user
          path: "/users/{userPrincipalName}"
          inputParameters:
            - name: userPrincipalName
              in: path
            - name: accountEnabled
              in: body
          operations:
            - name: disable-user
              method: PATCH

Fetches market rate and benchmark index data from Bloomberg Data License and loads the snapshot into a Snowflake staging table for risk and treasury analytics.

naftiko: "0.5"
info:
  label: "Bloomberg Market Data Feed to Snowflake"
  description: "Fetches market rate and benchmark index data from Bloomberg Data License and loads the snapshot into a Snowflake staging table for risk and treasury analytics."
  tags:
    - finance
    - bloomberg
    - snowflake
    - market-data
    - treasury
capability:
  exposes:
    - type: mcp
      namespace: market-data
      port: 8080
      tools:
        - name: load-bloomberg-market-data
          description: "Given a Bloomberg field set and security list, fetch current market data and insert a snapshot row into Snowflake. Use for daily treasury mark-to-market updates."
          inputParameters:
            - name: securities
              in: body
              type: string
              description: "Comma-separated Bloomberg security identifiers."
            - name: fields
              in: body
              type: string
              description: "Comma-separated Bloomberg field names (e.g., PX_LAST,YLD_YTM_MID)."
            - name: target_table
              in: body
              type: string
              description: "Fully qualified Snowflake target table for the data load."
          steps:
            - name: fetch-market-data
              type: call
              call: "bloomberg.get-reference-data"
              with:
                securities: "{{securities}}"
                fields: "{{fields}}"
            - name: load-to-snowflake
              type: call
              call: "snowflake-mkt.execute-statement"
              with:
                statement: "INSERT INTO {{target_table}} SELECT PARSE_JSON('{{fetch-market-data.data}}')"
  consumes:
    - type: http
      namespace: bloomberg
      baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/fields"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_token"
      resources:
        - name: reference-data
          path: "/requests/referenceData"
          inputParameters:
            - name: securities
              in: body
            - name: fields
              in: body
          operations:
            - name: get-reference-data
              method: POST
    - type: http
      namespace: snowflake-mkt
      baseUri: "https://capitalone.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statement
          path: "/statements"
          inputParameters:
            - name: statement
              in: body
          operations:
            - name: execute-statement
              method: POST

Queries Boomi AtomSphere for failed integration process executions in the last 24 hours and creates Jira tickets for each failure requiring investigation.

naftiko: "0.5"
info:
  label: "Boomi Integration Health Check"
  description: "Queries Boomi AtomSphere for failed integration process executions in the last 24 hours and creates Jira tickets for each failure requiring investigation."
  tags:
    - integration
    - boomi
    - jira
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: integration-ops
      port: 8080
      tools:
        - name: check-boomi-integration-health
          description: "Given a Boomi account ID and failure lookback window, list failed process executions and create a Jira ticket for each. Use for daily integration monitoring and SLA tracking."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Boomi AtomSphere account ID."
            - name: hours_back
              in: body
              type: integer
              description: "Number of hours back to check for failed executions."
          steps:
            - name: list-failed-executions
              type: call
              call: "boomi.list-process-executions"
              with:
                accountId: "{{account_id}}"
                status: "ERROR"
                hoursBack: "{{hours_back}}"
            - name: create-jira-ticket
              type: call
              call: "jira-int.create-issue"
              with:
                summary: "Boomi integration failure: {{list-failed-executions.processName}}"
                description: "Process {{list-failed-executions.processName}} failed at {{list-failed-executions.executionTime}}."
                project: "INTEG"
                issuetype: "Bug"
  consumes:
    - type: http
      namespace: boomi
      baseUri: "https://api.boomi.com/api/rest/v1"
      authentication:
        type: basic
        username: "$secrets.boomi_user"
        password: "$secrets.boomi_token"
      resources:
        - name: process-executions
          path: "/{accountId}/ExecutionRecord/query"
          inputParameters:
            - name: accountId
              in: path
            - name: status
              in: body
            - name: hoursBack
              in: body
          operations:
            - name: list-process-executions
              method: POST
    - type: http
      namespace: jira-int
      baseUri: "https://capitalone.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_token"
      resources:
        - name: issue
          path: "/issue"
          inputParameters:
            - name: summary
              in: body
            - name: description
              in: body
            - name: project
              in: body
            - name: issuetype
              in: body
          operations:
            - name: create-issue
              method: POST

Monitors branch network via SolarWinds, creates ServiceNow incidents for outages, and notifies IT.

naftiko: "0.5"
info:
  label: "Branch Network Performance Orchestrator"
  description: "Monitors branch network via SolarWinds, creates ServiceNow incidents for outages, and notifies IT."
  tags:
    - network
    - solarwinds
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: branch-network-performance
      port: 8080
      tools:
        - name: branch-network-performance
          description: "Monitors branch network via SolarWinds."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Branch Network Performance for {{entity_id}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#ops"
                text: "Branch Network Performance processed for {{entity_id}}"
            - name: get-alerts
              type: call
              call: "solarwinds.get-alerts"
              with:
                entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.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
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: solarwinds
      baseUri: "https://solarwinds.capitalone.com/api/v2"
      authentication:
        type: basic
        username: "$secrets.solarwinds_user"
        password: "$secrets.solarwinds_password"
      resources:
        - name: alerts
          path: "/alerts"
          operations:
            - name: get-alerts
              method: GET

Analyzes reward program data in Snowflake, identifies optimization opportunities, and publishes to Confluence.

naftiko: "0.5"
info:
  label: "Card Reward Program Analysis Orchestrator"
  description: "Analyzes reward program data in Snowflake, identifies optimization opportunities, and publishes to Confluence."
  tags:
    - banking
    - snowflake
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: card-reward-program-analysis
      port: 8080
      tools:
        - name: card-reward-program-analysis
          description: "Analyzes reward program data in Snowflake."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                entity_id: "{{entity_id}}"
            - name: publish
              type: call
              call: "confluence.create-page"
              with:
                space_key: "OPS"
                title: "Card Reward Program Analysis"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://capitalone.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
            - name: run-analysis
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://capitalone.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST

Detects Terraform state drift, creates ServiceNow change requests, and notifies platform team via Slack.

naftiko: "0.5"
info:
  label: "Cloud Infrastructure Drift Detection Orchestrator"
  description: "Detects Terraform state drift, creates ServiceNow change requests, and notifies platform team via Slack."
  tags:
    - infrastructure
    - terraform
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: cloud-infrastructure-drift-det
      port: 8080
      tools:
        - name: cloud-infrastructure-drift-detection
          description: "Detects Terraform state drift."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Cloud Infrastructure Drift Detection for {{entity_id}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#ops"
                text: "Cloud Infrastructure Drift Detection processed for {{entity_id}}"
            - name: check-state
              type: call
              call: "terraform.get-state"
              with:
                entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.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
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: workspaces
          path: "/workspaces"
          operations:
            - name: get-state
              method: GET

Monitors Cloudflare for active DDoS attack events and automatically creates a ServiceNow security incident and posts an alert to the SOC Slack channel.

naftiko: "0.5"
info:
  label: "Cloudflare DDoS Alert to SOC"
  description: "Monitors Cloudflare for active DDoS attack events and automatically creates a ServiceNow security incident and posts an alert to the SOC Slack channel."
  tags:
    - security
    - cloudflare
    - servicenow
    - slack
    - ddos
    - network-security
capability:
  exposes:
    - type: mcp
      namespace: network-security
      port: 8080
      tools:
        - name: handle-cloudflare-ddos-alert
          description: "Given a Cloudflare zone ID, check for active DDoS events, open a ServiceNow security incident, and alert the SOC Slack channel. Use for automated DDoS detection and response."
          inputParameters:
            - name: zone_id
              in: body
              type: string
              description: "The Cloudflare zone ID to check for DDoS activity."
            - name: soc_slack_channel
              in: body
              type: string
              description: "The SOC Slack channel ID for alert notification."
          steps:
            - name: check-ddos-events
              type: call
              call: "cloudflare.get-security-events"
              with:
                zoneId: "{{zone_id}}"
                eventType: "ddos"
            - name: create-security-incident
              type: call
              call: "servicenow-ddos.create-security-incident"
              with:
                short_description: "Cloudflare DDoS attack detected on zone {{zone_id}}"
                description: "DDoS event: {{check-ddos-events.ruleId}} started at {{check-ddos-events.occurred_at}}."
                category: "Network Security"
                urgency: "1"
            - name: alert-soc
              type: call
              call: "slack-soc.post-message"
              with:
                channel: "{{soc_slack_channel}}"
                text: "DDOS ALERT: Zone {{zone_id}} under attack. Incident: {{create-security-incident.incidentNumber}}."
  consumes:
    - type: http
      namespace: cloudflare
      baseUri: "https://api.cloudflare.com/client/v4"
      authentication:
        type: bearer
        token: "$secrets.cloudflare_token"
      resources:
        - name: security-events
          path: "/zones/{zoneId}/security/events"
          inputParameters:
            - name: zoneId
              in: path
            - name: eventType
              in: query
          operations:
            - name: get-security-events
              method: GET
    - type: http
      namespace: servicenow-ddos
      baseUri: "https://capitalone.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: security-incident
          path: "/table/sn_si_incident"
          inputParameters:
            - name: short_description
              in: body
            - name: description
              in: body
            - name: category
              in: body
            - name: urgency
              in: body
          operations:
            - name: create-security-incident
              method: POST
    - type: http
      namespace: slack-soc
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: message
          path: "/chat.postMessage"
          inputParameters:
            - name: channel
              in: body
            - name: text
              in: body
          operations:
            - name: post-message
              method: POST

Tracks compliance training completion in Workday, identifies gaps, and creates ServiceNow tickets for overdue items.

naftiko: "0.5"
info:
  label: "Compliance Training Tracking Orchestrator"
  description: "Tracks compliance training completion in Workday, identifies gaps, and creates ServiceNow tickets for overdue items."
  tags:
    - compliance
    - workday
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: compliance-training-tracking
      port: 8080
      tools:
        - name: compliance-training-tracking
          description: "Tracks compliance training completion in Workday."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Compliance Training Tracking for {{entity_id}}"
            - name: get-worker
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.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
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/capitalone/workers"
          operations:
            - name: get-worker
              method: GET

Retrieves purchase order status from Coupa.

naftiko: "0.5"
info:
  label: "Coupa Purchase Order Status Lookup"
  description: "Retrieves purchase order status from Coupa."
  tags:
    - procurement
    - coupa
capability:
  exposes:
    - type: mcp
      namespace: po-status
      port: 8080
      tools:
        - name: get-po-status
          description: "Look up Coupa purchase order status."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "Coupa PO number."
          call: "coupa.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: total_amount
              type: number
              mapping: "$.total"
  consumes:
    - type: http
      namespace: coupa
      baseUri: "https://capitalone.coupahost.com/api"
      authentication:
        type: bearer
        token: "$secrets.coupa_token"
      resources:
        - name: purchase-orders
          path: "/purchase_orders/{{po_number}}"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET

When a Coupa purchase requisition is submitted, creates a ServiceNow approval task for the budget owner and sends an approval link via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Coupa Purchase Requisition Approval"
  description: "When a Coupa purchase requisition is submitted, creates a ServiceNow approval task for the budget owner and sends an approval link via Microsoft Teams."
  tags:
    - procurement
    - coupa
    - servicenow
    - microsoft-teams
    - approval
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: trigger-po-approval
          description: "Given a Coupa requisition ID and budget owner email, open a ServiceNow approval task and notify the owner via Teams. Invoke when a new procurement requisition is awaiting budget approval."
          inputParameters:
            - name: requisition_id
              in: body
              type: string
              description: "The Coupa purchase requisition ID."
            - name: budget_owner_email
              in: body
              type: string
              description: "Email of the budget owner responsible for approval."
          steps:
            - name: get-requisition
              type: call
              call: "coupa.get-requisition"
              with:
                requisitionId: "{{requisition_id}}"
            - name: create-approval-task
              type: call
              call: "servicenow-po.create-approval-task"
              with:
                description: "PO requisition {{requisition_id}} for ${{get-requisition.total}} pending approval."
                assignedTo: "{{budget_owner_email}}"
            - name: notify-owner
              type: call
              call: "msteams-po.send-message"
              with:
                recipient: "{{budget_owner_email}}"
                message: "Coupa requisition {{requisition_id}} for ${{get-requisition.total}} requires your approval. Task: {{create-approval-task.taskId}}."
  consumes:
    - type: http
      namespace: coupa
      baseUri: "https://capitalone.coupahost.com/api"
      authentication:
        type: apikey
        key: "X-COUPA-API-KEY"
        value: "$secrets.coupa_api_key"
        placement: header
      resources:
        - name: requisition
          path: "/requisitions/{requisitionId}"
          inputParameters:
            - name: requisitionId
              in: path
          operations:
            - name: get-requisition
              method: GET
    - type: http
      namespace: servicenow-po
      baseUri: "https://capitalone.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: approval-task
          path: "/table/sc_task"
          inputParameters:
            - name: description
              in: body
            - name: assignedTo
              in: body
          operations:
            - name: create-approval-task
              method: POST
    - type: http
      namespace: msteams-po
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: send-mail
          path: "/users/{recipient}/sendMail"
          inputParameters:
            - name: recipient
              in: path
            - name: message
              in: body
          operations:
            - name: send-message
              method: POST

Investigates flagged transactions by enriching with Snowflake risk data, creating a ServiceNow case, and alerting the fraud team via Slack.

naftiko: "0.5"
info:
  label: "Credit Card Fraud Investigation Orchestrator"
  description: "Investigates flagged transactions by enriching with Snowflake risk data, creating a ServiceNow case, and alerting the fraud team via Slack."
  tags:
    - fraud
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: credit-card-fraud-investigatio
      port: 8080
      tools:
        - name: credit-card-fraud-investigation
          description: "Investigates flagged transactions by enriching with Snowflake risk data."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                entity_id: "{{entity_id}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Credit Card Fraud Investigation for {{entity_id}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#ops"
                text: "Credit Card Fraud Investigation processed for {{entity_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://capitalone.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
            - name: run-analysis
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.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
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Evaluates credit limit changes using Databricks ML models, updates customer records, and notifies via email.

naftiko: "0.5"
info:
  label: "Credit Limit Adjustment Orchestrator"
  description: "Evaluates credit limit changes using Databricks ML models, updates customer records, and notifies via email."
  tags:
    - banking
    - databricks
    - email
capability:
  exposes:
    - type: mcp
      namespace: credit-limit-adjustment
      port: 8080
      tools:
        - name: credit-limit-adjustment
          description: "Evaluates credit limit changes using Databricks ML models."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: run-model
              type: call
              call: "databricks.run-job"
              with:
                entity_id: "{{entity_id}}"
            - name: send-email
              type: call
              call: "email.send-message"
              with:
                to: "team@capitalone.com"
                subject: "Credit Limit Adjustment"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://capitalone.cloud.databricks.com/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: email
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.graph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-message
              method: POST

Retrieves the execution log from a Databricks credit risk scoring job and publishes a structured audit record to a Confluence model governance page.

naftiko: "0.5"
info:
  label: "Credit Risk Model Audit Log to Confluence"
  description: "Retrieves the execution log from a Databricks credit risk scoring job and publishes a structured audit record to a Confluence model governance page."
  tags:
    - compliance
    - databricks
    - confluence
    - model-governance
    - financial-services
capability:
  exposes:
    - type: mcp
      namespace: model-governance
      port: 8080
      tools:
        - name: publish-model-audit-log
          description: "Given a Databricks job run ID and Confluence page ID, fetch the run execution details and append an audit record to the model governance page. Use for monthly model risk management reporting."
          inputParameters:
            - name: run_id
              in: body
              type: string
              description: "The Databricks job run ID for the credit risk model execution."
            - name: confluence_page_id
              in: body
              type: string
              description: "The Confluence page ID to append the audit record to."
          steps:
            - name: get-run-details
              type: call
              call: "databricks-audit.get-run"
              with:
                runId: "{{run_id}}"
            - name: update-confluence-page
              type: call
              call: "confluence.update-page"
              with:
                pageId: "{{confluence_page_id}}"
                body: "Run {{run_id}} completed at {{get-run-details.endTime}} with status {{get-run-details.state.resultState}}."
  consumes:
    - type: http
      namespace: databricks-audit
      baseUri: "https://adb-capitalone.azuredatabricks.net/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: run
          path: "/jobs/runs/get"
          inputParameters:
            - name: runId
              in: query
          operations:
            - name: get-run
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://capitalone.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_token"
      resources:
        - name: page
          path: "/content/{pageId}"
          inputParameters:
            - name: pageId
              in: path
            - name: body
              in: body
          operations:
            - name: update-page
              method: PUT

Enriches customer profiles by aggregating data from Snowflake, Salesforce, and publishing to Databricks feature store.

naftiko: "0.5"
info:
  label: "Customer 360 Enrichment Orchestrator"
  description: "Enriches customer profiles by aggregating data from Snowflake, Salesforce, and publishing to Databricks feature store."
  tags:
    - data
    - snowflake
    - salesforce
    - databricks
capability:
  exposes:
    - type: mcp
      namespace: customer-360-enrichment
      port: 8080
      tools:
        - name: customer-360-enrichment
          description: "Enriches customer profiles by aggregating data from Snowflake."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                entity_id: "{{entity_id}}"
            - name: run-model
              type: call
              call: "databricks.run-job"
              with:
                entity_id: "{{entity_id}}"
            - name: update-sf
              type: call
              call: "salesforce.update-opp"
              with:
                entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://capitalone.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
            - name: run-analysis
              method: POST
    - type: http
      namespace: databricks
      baseUri: "https://capitalone.cloud.databricks.com/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://capitalone.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: objects
          path: "/sobjects"
          operations:
            - name: get-lead
              method: GET
            - name: create-lead
              method: POST
            - name: update-opp
              method: PATCH

Processes account closure by validating balances in Snowflake, creating a ServiceNow request, and sending confirmation via email.

naftiko: "0.5"
info:
  label: "Customer Account Closure Orchestrator"
  description: "Processes account closure by validating balances in Snowflake, creating a ServiceNow request, and sending confirmation via email."
  tags:
    - banking
    - snowflake
    - servicenow
    - email
capability:
  exposes:
    - type: mcp
      namespace: customer-account-closure
      port: 8080
      tools:
        - name: customer-account-closure
          description: "Processes account closure by validating balances in Snowflake."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                entity_id: "{{entity_id}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Customer Account Closure for {{entity_id}}"
            - name: send-email
              type: call
              call: "email.send-message"
              with:
                to: "team@capitalone.com"
                subject: "Customer Account Closure"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://capitalone.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
            - name: run-analysis
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.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
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: email
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.graph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-message
              method: POST

Runs churn prediction models in Databricks, identifies at-risk customers, and creates Salesforce retention campaigns.

naftiko: "0.5"
info:
  label: "Customer Churn Prediction Orchestrator"
  description: "Runs churn prediction models in Databricks, identifies at-risk customers, and creates Salesforce retention campaigns."
  tags:
    - analytics
    - databricks
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: customer-churn-prediction
      port: 8080
      tools:
        - name: customer-churn-prediction
          description: "Runs churn prediction models in Databricks."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: run-model
              type: call
              call: "databricks.run-job"
              with:
                entity_id: "{{entity_id}}"
            - name: update-sf
              type: call
              call: "salesforce.update-opp"
              with:
                entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://capitalone.cloud.databricks.com/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://capitalone.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: objects
          path: "/sobjects"
          operations:
            - name: get-lead
              method: GET
            - name: create-lead
              method: POST
            - name: update-opp
              method: PATCH

Syncs communication preferences between Salesforce and marketing platforms, validates consent, and logs in ServiceNow.

naftiko: "0.5"
info:
  label: "Customer Communication Preference Orchestrator"
  description: "Syncs communication preferences between Salesforce and marketing platforms, validates consent, and logs in ServiceNow."
  tags:
    - marketing
    - salesforce
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: customer-communication-prefere
      port: 8080
      tools:
        - name: customer-communication-preference
          description: "Syncs communication preferences between Salesforce and marketing platforms."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Customer Communication Preference for {{entity_id}}"
            - name: update-sf
              type: call
              call: "salesforce.update-opp"
              with:
                entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.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
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://capitalone.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: objects
          path: "/sobjects"
          operations:
            - name: get-lead
              method: GET
            - name: create-lead
              method: POST
            - name: update-opp
              method: PATCH

Routes customer complaints from Salesforce to ServiceNow, assigns priority, and notifies the resolution team via Slack.

naftiko: "0.5"
info:
  label: "Customer Complaint Routing Orchestrator"
  description: "Routes customer complaints from Salesforce to ServiceNow, assigns priority, and notifies the resolution team via Slack."
  tags:
    - support
    - salesforce
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: customer-complaint-routing
      port: 8080
      tools:
        - name: customer-complaint-routing
          description: "Routes customer complaints from Salesforce to ServiceNow."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Customer Complaint Routing for {{entity_id}}"
            - name: update-sf
              type: call
              call: "salesforce.update-opp"
              with:
                entity_id: "{{entity_id}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#ops"
                text: "Customer Complaint Routing processed for {{entity_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.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
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://capitalone.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: objects
          path: "/sobjects"
          operations:
            - name: get-lead
              method: GET
            - name: create-lead
              method: POST
            - name: update-opp
              method: PATCH
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Aggregates customer feedback, runs sentiment analysis in Databricks, and publishes insights to Confluence.

naftiko: "0.5"
info:
  label: "Customer Feedback Analysis Orchestrator"
  description: "Aggregates customer feedback, runs sentiment analysis in Databricks, and publishes insights to Confluence."
  tags:
    - analytics
    - databricks
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: customer-feedback-analysis
      port: 8080
      tools:
        - name: customer-feedback-analysis
          description: "Aggregates customer feedback."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: run-model
              type: call
              call: "databricks.run-job"
              with:
                entity_id: "{{entity_id}}"
            - name: publish
              type: call
              call: "confluence.create-page"
              with:
                space_key: "OPS"
                title: "Customer Feedback Analysis"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://capitalone.cloud.databricks.com/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://capitalone.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST

Verifies customer identity using Snowflake data, updates verification status, and notifies compliance.

naftiko: "0.5"
info:
  label: "Customer Identity Verification Orchestrator"
  description: "Verifies customer identity using Snowflake data, updates verification status, and notifies compliance."
  tags:
    - banking
    - snowflake
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: customer-identity-verification
      port: 8080
      tools:
        - name: customer-identity-verification
          description: "Verifies customer identity using Snowflake data."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                entity_id: "{{entity_id}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Customer Identity Verification for {{entity_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://capitalone.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
            - name: run-analysis
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.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
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST

Orchestrates KYC verification by pulling data from Snowflake, running identity checks, and updating Salesforce.

naftiko: "0.5"
info:
  label: "Customer Onboarding KYC Orchestrator"
  description: "Orchestrates KYC verification by pulling data from Snowflake, running identity checks, and updating Salesforce."
  tags:
    - banking
    - snowflake
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: customer-onboarding-kyc
      port: 8080
      tools:
        - name: customer-onboarding-kyc
          description: "Orchestrates KYC verification by pulling data from Snowflake."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                entity_id: "{{entity_id}}"
            - name: update-sf
              type: call
              call: "salesforce.update-opp"
              with:
                entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://capitalone.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
            - name: run-analysis
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://capitalone.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: objects
          path: "/sobjects"
          operations:
            - name: get-lead
              method: GET
            - name: create-lead
              method: POST
            - name: update-opp
              method: PATCH

Analyzes Snowflake warehouse utilization, identifies savings, and creates Jira implementation tickets.

naftiko: "0.5"
info:
  label: "Data Lake Cost Optimization Orchestrator"
  description: "Analyzes Snowflake warehouse utilization, identifies savings, and creates Jira implementation tickets."
  tags:
    - finops
    - snowflake
    - jira
capability:
  exposes:
    - type: mcp
      namespace: data-lake-cost-optimization
      port: 8080
      tools:
        - name: data-lake-cost-optimization
          description: "Analyzes Snowflake warehouse utilization."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                entity_id: "{{entity_id}}"
            - name: create-issue
              type: call
              call: "jira.create-issue"
              with:
                project: "OPS"
                summary: "Data Lake Cost Optimization - {{entity_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://capitalone.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
            - name: run-analysis
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://capitalone.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Detects Snowflake data quality issues, creates Jira tickets, and alerts data stewards via Slack.

naftiko: "0.5"
info:
  label: "Data Quality Remediation Orchestrator"
  description: "Detects Snowflake data quality issues, creates Jira tickets, and alerts data stewards via Slack."
  tags:
    - data
    - snowflake
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: data-quality-remediation
      port: 8080
      tools:
        - name: data-quality-remediation
          description: "Detects Snowflake data quality issues."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                entity_id: "{{entity_id}}"
            - name: create-issue
              type: call
              call: "jira.create-issue"
              with:
                project: "OPS"
                summary: "Data Quality Remediation - {{entity_id}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#ops"
                text: "Data Quality Remediation processed for {{entity_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://capitalone.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
            - name: run-analysis
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://capitalone.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Validates schema changes in Snowflake, creates ServiceNow change requests, and notifies DBAs via Slack.

naftiko: "0.5"
info:
  label: "Database Schema Migration Orchestrator"
  description: "Validates schema changes in Snowflake, creates ServiceNow change requests, and notifies DBAs via Slack."
  tags:
    - data
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: database-schema-migration
      port: 8080
      tools:
        - name: database-schema-migration
          description: "Validates schema changes in Snowflake."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                entity_id: "{{entity_id}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Database Schema Migration for {{entity_id}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#ops"
                text: "Database Schema Migration processed for {{entity_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://capitalone.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
            - name: run-analysis
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.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
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Checks the latest Databricks job run status for a given ML pipeline and opens a ServiceNow incident if the run failed or exceeded the SLA window.

naftiko: "0.5"
info:
  label: "Databricks ML Pipeline Monitor"
  description: "Checks the latest Databricks job run status for a given ML pipeline and opens a ServiceNow incident if the run failed or exceeded the SLA window."
  tags:
    - data
    - databricks
    - servicenow
    - ml-ops
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: mlops
      port: 8080
      tools:
        - name: monitor-databricks-pipeline
          description: "Given a Databricks job ID and SLA window in minutes, check the latest run status and open a ServiceNow incident if it failed or ran over SLA. Invoke for scheduled ML model training jobs."
          inputParameters:
            - name: job_id
              in: body
              type: string
              description: "The Databricks job ID to monitor."
            - name: sla_minutes
              in: body
              type: integer
              description: "Maximum expected run duration in minutes before SLA breach."
          steps:
            - name: get-latest-run
              type: call
              call: "databricks.get-job-run"
              with:
                jobId: "{{job_id}}"
            - name: open-incident
              type: call
              call: "servicenow-ml.create-incident"
              with:
                short_description: "Databricks job {{job_id}} failed or exceeded SLA of {{sla_minutes}} minutes."
                category: "Data Engineering"
                urgency: "2"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://adb-capitalone.azuredatabricks.net/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: job-run
          path: "/jobs/runs/get-latest-by-name"
          inputParameters:
            - name: jobId
              in: query
          operations:
            - name: get-job-run
              method: GET
    - type: http
      namespace: servicenow-ml
      baseUri: "https://capitalone.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: incident
          path: "/table/incident"
          inputParameters:
            - name: short_description
              in: body
            - name: category
              in: body
            - name: urgency
              in: body
          operations:
            - name: create-incident
              method: POST

Checks health status of a Databricks model serving endpoint.

naftiko: "0.5"
info:
  label: "Databricks Model Serving Health Lookup"
  description: "Checks health status of a Databricks model serving endpoint."
  tags:
    - ml
    - databricks
capability:
  exposes:
    - type: mcp
      namespace: model-serving
      port: 8080
      tools:
        - name: get-endpoint-health
          description: "Look up Databricks model serving endpoint health."
          inputParameters:
            - name: endpoint_name
              in: body
              type: string
              description: "Model serving endpoint name."
          call: "databricks.get-endpoint"
          with:
            endpoint_name: "{{endpoint_name}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.state.ready"
            - name: config_version
              type: number
              mapping: "$.config.served_models[0].model_version"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://capitalone.cloud.databricks.com/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: endpoints
          path: "/serving-endpoints/{{endpoint_name}}"
          inputParameters:
            - name: endpoint_name
              in: path
          operations:
            - name: get-endpoint
              method: GET

Queries Datadog monitors for a given service tag and returns a health status summary, triggering a PagerDuty-style ServiceNow incident if any monitors are in alert state.

naftiko: "0.5"
info:
  label: "Datadog Service Health Check"
  description: "Queries Datadog monitors for a given service tag and returns a health status summary, triggering a PagerDuty-style ServiceNow incident if any monitors are in alert state."
  tags:
    - observability
    - datadog
    - servicenow
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: observability
      port: 8080
      tools:
        - name: check-service-health
          description: "Given a Datadog service tag, retrieve monitor states and open a ServiceNow incident if any are alerting. Use for proactive service health verification before deployments or during incidents."
          inputParameters:
            - name: service_tag
              in: body
              type: string
              description: "The Datadog service tag to filter monitors (e.g., service:credit-api)."
          steps:
            - name: get-monitors
              type: call
              call: "datadog-health.get-monitors"
              with:
                tags: "{{service_tag}}"
            - name: open-incident
              type: call
              call: "servicenow-health.create-incident"
              with:
                short_description: "Service degradation detected for {{service_tag}}"
                urgency: "1"
                impact: "1"
  consumes:
    - type: http
      namespace: datadog-health
      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"
          inputParameters:
            - name: tags
              in: query
          operations:
            - name: get-monitors
              method: GET
    - type: http
      namespace: servicenow-health
      baseUri: "https://capitalone.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: incident
          path: "/table/incident"
          inputParameters:
            - name: short_description
              in: body
            - name: urgency
              in: body
            - name: impact
              in: body
          operations:
            - name: create-incident
              method: POST

Manages feature flags by evaluating Datadog metrics, updating configurations, and notifying product teams.

naftiko: "0.5"
info:
  label: "Digital Banking Feature Flag Orchestrator"
  description: "Manages feature flags by evaluating Datadog metrics, updating configurations, and notifying product teams."
  tags:
    - product
    - datadog
    - slack
capability:
  exposes:
    - type: mcp
      namespace: digital-banking-feature-flag
      port: 8080
      tools:
        - name: digital-banking-feature-flag
          description: "Manages feature flags by evaluating Datadog metrics."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: check-metrics
              type: call
              call: "datadog.get-monitors"
              with:
                entity_id: "{{entity_id}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#ops"
                text: "Digital Banking Feature Flag processed for {{entity_id}}"
  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"
          operations:
            - name: get-monitors
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Initiates DR test, validates recovery metrics, and publishes test results to Confluence.

naftiko: "0.5"
info:
  label: "Disaster Recovery Test Orchestrator"
  description: "Initiates DR test, validates recovery metrics, and publishes test results to Confluence."
  tags:
    - infrastructure
    - servicenow
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: disaster-recovery-test
      port: 8080
      tools:
        - name: disaster-recovery-test
          description: "Initiates DR test."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Disaster Recovery Test for {{entity_id}}"
            - name: publish
              type: call
              call: "confluence.create-page"
              with:
                space_key: "OPS"
                title: "Disaster Recovery Test"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.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
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://capitalone.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST

Retrieves customer profile data from DynamoDB.

naftiko: "0.5"
info:
  label: "DynamoDB Customer Profile Lookup"
  description: "Retrieves customer profile data from DynamoDB."
  tags:
    - data
    - dynamodb
capability:
  exposes:
    - type: mcp
      namespace: customer-data
      port: 8080
      tools:
        - name: get-customer-profile
          description: "Look up customer profile from DynamoDB."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "Customer ID."
          call: "dynamodb.get-item"
          with:
            customer_id: "{{customer_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.Item.name.S"
            - name: tier
              type: string
              mapping: "$.Item.tier.S"
  consumes:
    - type: http
      namespace: dynamodb
      baseUri: "https://dynamodb.us-east-1.amazonaws.com"
      authentication:
        type: bearer
        token: "$secrets.aws_dynamodb_token"
      resources:
        - name: items
          path: "/"
          operations:
            - name: get-item
              method: POST

Reviews Okta access assignments, validates against role requirements, and creates ServiceNow tickets for anomalies.

naftiko: "0.5"
info:
  label: "Employee Access Review Orchestrator"
  description: "Reviews Okta access assignments, validates against role requirements, and creates ServiceNow tickets for anomalies."
  tags:
    - identity
    - okta
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: employee-access-review
      port: 8080
      tools:
        - name: employee-access-review
          description: "Reviews Okta access assignments."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Employee Access Review for {{entity_id}}"
            - name: check-access
              type: call
              call: "okta.get-user"
              with:
                entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.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
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: okta
      baseUri: "https://capitalone.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users"
          operations:
            - name: get-user
              method: GET

When an employee departure is flagged in Workday, revokes Okta/Azure AD access, closes open ServiceNow tickets, and notifies the manager via Teams.

naftiko: "0.5"
info:
  label: "Employee Offboarding Workflow"
  description: "When an employee departure is flagged in Workday, revokes Okta/Azure AD access, closes open ServiceNow tickets, and notifies the manager via Teams."
  tags:
    - hr
    - offboarding
    - workday
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-offboarding
      port: 8080
      tools:
        - name: orchestrate-employee-offboarding
          description: "Given a Workday worker ID and termination date, close open ServiceNow tasks, disable the user account via Microsoft Graph, and notify the manager. Invoke when an employee leaves Capital One."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID for the departing employee."
            - name: termination_date
              in: body
              type: string
              description: "The employee's last day in ISO 8601 format."
            - name: manager_upn
              in: body
              type: string
              description: "The UPN of the employee's manager for notification."
          steps:
            - name: get-worker
              type: call
              call: "workday-off.get-worker"
              with:
                workerId: "{{worker_id}}"
            - name: disable-aad-account
              type: call
              call: "msgraph-off.disable-user"
              with:
                userPrincipalName: "{{get-worker.primaryEmail}}"
            - name: close-snow-tasks
              type: call
              call: "servicenow-off.close-user-tasks"
              with:
                assignedTo: "{{get-worker.primaryEmail}}"
            - name: notify-manager
              type: call
              call: "msteams-off.send-message"
              with:
                recipient: "{{manager_upn}}"
                message: "Offboarding complete for {{get-worker.displayName}} as of {{termination_date}}."
  consumes:
    - type: http
      namespace: workday-off
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: worker
          path: "/workers/{{workerId}}"
          inputParameters:
            - name: workerId
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: msgraph-off
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: user
          path: "/users/{userPrincipalName}"
          inputParameters:
            - name: userPrincipalName
              in: path
            - name: accountEnabled
              in: body
          operations:
            - name: disable-user
              method: PATCH
    - type: http
      namespace: servicenow-off
      baseUri: "https://capitalone.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: task
          path: "/table/task"
          inputParameters:
            - name: assignedTo
              in: query
            - name: state
              in: body
          operations:
            - name: close-user-tasks
              method: PATCH
    - type: http
      namespace: msteams-off
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: send-mail
          path: "/users/{recipient}/sendMail"
          inputParameters:
            - name: recipient
              in: path
            - name: message
              in: body
          operations:
            - name: send-message
              method: POST

When a new hire record is created in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder, and sends a Microsoft Teams welcome message.

naftiko: "0.5"
info:
  label: "Employee Onboarding Orchestrator"
  description: "When a new hire record is created in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder, and sends a Microsoft Teams welcome message."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: orchestrate-new-hire-onboarding
          description: "Given a Workday worker ID and start date, open a ServiceNow onboarding task, provision a SharePoint folder, and send a Teams welcome message. Invoke when a new employee joins Capital One."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID for the new hire."
            - name: start_date
              in: body
              type: string
              description: "The employee's start date in ISO 8601 format (YYYY-MM-DD)."
            - name: manager_email
              in: body
              type: string
              description: "The manager's email address for Teams notification."
          steps:
            - name: get-worker
              type: call
              call: "workday.get-worker"
              with:
                workerId: "{{worker_id}}"
            - name: create-onboarding-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Onboarding: {{get-worker.displayName}}"
                category: "HR"
                assignment_group: "IT Onboarding"
            - name: provision-sharepoint
              type: call
              call: "msgraph.create-drive-folder"
              with:
                parentPath: "/HR/NewHires"
                folderName: "{{get-worker.displayName}}"
            - name: send-welcome-message
              type: call
              call: "msteams.send-message"
              with:
                recipient: "{{manager_email}}"
                message: "Welcome {{get-worker.displayName}} to Capital One starting {{start_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: worker
          path: "/workers/{{workerId}}"
          inputParameters:
            - name: workerId
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: incident
          path: "/table/incident"
          inputParameters:
            - name: short_description
              in: body
            - name: category
              in: body
            - name: assignment_group
              in: body
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-folder
          path: "/sites/root/drive/root:/{parentPath}/{folderName}:/children"
          inputParameters:
            - name: parentPath
              in: path
            - name: folderName
              in: path
          operations:
            - name: create-drive-folder
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: message
          path: "/users/{recipient}/sendMail"
          inputParameters:
            - name: recipient
              in: path
            - name: message
              in: body
          operations:
            - name: send-message
              method: POST

When an expense report is submitted in SAP Concur exceeding a policy threshold, creates a ServiceNow approval task and notifies the approver via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Expense Report Approval via SAP Concur"
  description: "When an expense report is submitted in SAP Concur exceeding a policy threshold, creates a ServiceNow approval task and notifies the approver via Microsoft Teams."
  tags:
    - finance
    - expense-management
    - sap-concur
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: finance-expense
      port: 8080
      tools:
        - name: trigger-expense-approval-workflow
          description: "Given a Concur expense report ID and approval threshold, create a ServiceNow approval task and send a Teams notification to the approver. Use when high-value expense reports need manager review."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "The SAP Concur expense report ID."
            - name: approver_email
              in: body
              type: string
              description: "The approver's email address for Teams notification."
            - name: threshold
              in: body
              type: number
              description: "The dollar threshold above which approval is required."
          steps:
            - name: get-expense-report
              type: call
              call: "concur.get-expense-report"
              with:
                reportId: "{{report_id}}"
            - name: create-approval-task
              type: call
              call: "servicenow-exp.create-approval-task"
              with:
                description: "Expense report {{report_id}} totaling {{get-expense-report.total}} requires approval."
                assignedTo: "{{approver_email}}"
            - name: notify-approver
              type: call
              call: "msteams-exp.send-message"
              with:
                recipient: "{{approver_email}}"
                message: "Expense report {{report_id}} of ${{get-expense-report.total}} requires your approval. ServiceNow task: {{create-approval-task.taskId}}."
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://www.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-report
          path: "/expense/reports/{reportId}"
          inputParameters:
            - name: reportId
              in: path
          operations:
            - name: get-expense-report
              method: GET
    - type: http
      namespace: servicenow-exp
      baseUri: "https://capitalone.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: approval-task
          path: "/table/sc_task"
          inputParameters:
            - name: description
              in: body
            - name: assignedTo
              in: body
          operations:
            - name: create-approval-task
              method: POST
    - type: http
      namespace: msteams-exp
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: send-mail
          path: "/users/{recipient}/sendMail"
          inputParameters:
            - name: recipient
              in: path
            - name: message
              in: body
          operations:
            - name: send-message
              method: POST

When a transaction fraud alert is logged, uses Anthropic to summarize the alert context and risk signals, then creates a ServiceNow security incident for the fraud operations team.

naftiko: "0.5"
info:
  label: "Fraud Alert Triage with Anthropic AI"
  description: "When a transaction fraud alert is logged, uses Anthropic to summarize the alert context and risk signals, then creates a ServiceNow security incident for the fraud operations team."
  tags:
    - ai
    - fraud-detection
    - anthropic
    - servicenow
    - financial-services
capability:
  exposes:
    - type: mcp
      namespace: fraud-ops
      port: 8080
      tools:
        - name: triage-fraud-alert
          description: "Given a fraud alert payload with transaction details, send the context to Anthropic for risk summarization and open a ServiceNow security incident with the AI-generated summary. Use for automated fraud triage."
          inputParameters:
            - name: alert_payload
              in: body
              type: string
              description: "JSON string containing fraud alert details including transaction ID, amount, and risk signals."
            - name: account_id
              in: body
              type: string
              description: "The customer account ID associated with the fraud alert."
          steps:
            - name: summarize-alert
              type: call
              call: "anthropic.create-message"
              with:
                model: "claude-3-5-sonnet-20241022"
                max_tokens: 500
                messages: "[{\"role\": \"user\", \"content\": \"Summarize this fraud alert and assess risk level: {{alert_payload}}\"}]"
            - name: create-fraud-incident
              type: call
              call: "servicenow-fraud.create-security-incident"
              with:
                short_description: "Fraud alert for account {{account_id}}"
                description: "{{summarize-alert.content}}"
                category: "Fraud"
                urgency: "1"
  consumes:
    - 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"
          inputParameters:
            - name: model
              in: body
            - name: max_tokens
              in: body
            - name: messages
              in: body
          operations:
            - name: create-message
              method: POST
    - type: http
      namespace: servicenow-fraud
      baseUri: "https://capitalone.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: security-incident
          path: "/table/sn_si_incident"
          inputParameters:
            - name: short_description
              in: body
            - name: description
              in: body
            - name: category
              in: body
            - name: urgency
              in: body
          operations:
            - name: create-security-incident
              method: POST

When a GitHub Actions workflow fails, opens a Jira incident ticket, posts a Datadog event for observability, and notifies the on-call engineer via Microsoft Teams.

naftiko: "0.5"
info:
  label: "GitHub CI/CD Pipeline Failure Responder"
  description: "When a GitHub Actions workflow fails, opens a Jira incident ticket, posts a Datadog event for observability, and notifies the on-call engineer via Microsoft Teams."
  tags:
    - devops
    - cicd
    - github
    - jira
    - datadog
    - microsoft-teams
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: cicd-ops
      port: 8080
      tools:
        - name: handle-pipeline-failure
          description: "Given a GitHub Actions run ID and repository name, retrieve failure details, open a Jira ticket, post a Datadog event, and notify the on-call engineer via Teams. Invoke on any failed workflow run."
          inputParameters:
            - name: run_id
              in: body
              type: string
              description: "The GitHub Actions workflow run ID."
            - name: repo
              in: body
              type: string
              description: "The repository name in owner/repo format."
            - name: oncall_email
              in: body
              type: string
              description: "Email of the on-call engineer to notify."
          steps:
            - name: get-run-details
              type: call
              call: "github.get-workflow-run"
              with:
                runId: "{{run_id}}"
                repo: "{{repo}}"
            - name: open-jira-ticket
              type: call
              call: "jira.create-issue"
              with:
                summary: "Pipeline failure: {{repo}} run {{run_id}}"
                description: "Workflow {{get-run-details.name}} failed at {{get-run-details.updated_at}}."
                project: "DEVOPS"
                issuetype: "Bug"
            - name: post-datadog-event
              type: call
              call: "datadog.create-event"
              with:
                title: "Pipeline failure: {{repo}}"
                text: "Run {{run_id}} failed. Jira: {{open-jira-ticket.issueKey}}"
                alert_type: "error"
            - name: notify-oncall
              type: call
              call: "msteams-ci.send-message"
              with:
                recipient: "{{oncall_email}}"
                message: "Pipeline failure in {{repo}}. Jira: {{open-jira-ticket.issueKey}}. Datadog event logged."
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflow-run
          path: "/repos/{repo}/actions/runs/{runId}"
          inputParameters:
            - name: repo
              in: path
            - name: runId
              in: path
          operations:
            - name: get-workflow-run
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://capitalone.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_token"
      resources:
        - name: issue
          path: "/issue"
          inputParameters:
            - name: summary
              in: body
            - name: description
              in: body
            - name: project
              in: body
            - name: issuetype
              in: body
          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: event
          path: "/events"
          inputParameters:
            - name: title
              in: body
            - name: text
              in: body
            - name: alert_type
              in: body
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: msteams-ci
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: send-mail
          path: "/users/{recipient}/sendMail"
          inputParameters:
            - name: recipient
              in: path
            - name: message
              in: body
          operations:
            - name: send-message
              method: POST

Retrieves code scanning alert count for a GitHub repository.

naftiko: "0.5"
info:
  label: "GitHub Code Scan Findings Lookup"
  description: "Retrieves code scanning alert count for a GitHub repository."
  tags:
    - security
    - github
capability:
  exposes:
    - type: mcp
      namespace: code-scanning
      port: 8080
      tools:
        - name: get-scan-findings
          description: "Look up GitHub code scanning alerts."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "GitHub repository (org/repo)."
          call: "github.get-alerts"
          with:
            repo: "{{repo_name}}"
          outputParameters:
            - name: alert_count
              type: number
              mapping: "$.length"
            - name: critical_count
              type: number
              mapping: "$.critical"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: alerts
          path: "/repos/{{repo}}/code-scanning/alerts"
          inputParameters:
            - name: repo
              in: path
          operations:
            - name: get-alerts
              method: GET

Queries GitHub Advanced Security for high-severity code scanning alerts and creates Jira tickets for each unresolved finding to enforce remediation SLAs.

naftiko: "0.5"
info:
  label: "GitHub Security Scan to Jira"
  description: "Queries GitHub Advanced Security for high-severity code scanning alerts and creates Jira tickets for each unresolved finding to enforce remediation SLAs."
  tags:
    - devops
    - security
    - github
    - jira
    - devsecops
capability:
  exposes:
    - type: mcp
      namespace: devsecops
      port: 8080
      tools:
        - name: sync-security-alerts-to-jira
          description: "Given a repository name and severity level, fetch unresolved GitHub code scanning alerts and create a Jira ticket for each finding. Use for daily security remediation triage."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "Repository in owner/repo format to scan."
            - name: severity
              in: body
              type: string
              description: "Minimum severity to capture (critical, high, medium, low)."
          steps:
            - name: get-alerts
              type: call
              call: "github-sec.list-code-scanning-alerts"
              with:
                repo: "{{repo}}"
                severity: "{{severity}}"
                state: "open"
            - name: create-jira-tickets
              type: call
              call: "jira-sec.create-issue"
              with:
                summary: "Security alert: {{get-alerts.rule.description}} in {{repo}}"
                description: "{{get-alerts.most_recent_instance.message.text}}"
                project: "SECDEP"
                issuetype: "Security"
  consumes:
    - type: http
      namespace: github-sec
      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
            - name: severity
              in: query
            - name: state
              in: query
          operations:
            - name: list-code-scanning-alerts
              method: GET
    - type: http
      namespace: jira-sec
      baseUri: "https://capitalone.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_token"
      resources:
        - name: issue
          path: "/issue"
          inputParameters:
            - name: summary
              in: body
            - name: description
              in: body
            - name: project
              in: body
            - name: issuetype
              in: body
          operations:
            - name: create-issue
              method: POST

Collects incident data from ServiceNow, gathers metrics from Datadog, and publishes postmortem to Confluence.

naftiko: "0.5"
info:
  label: "Incident Postmortem Orchestrator"
  description: "Collects incident data from ServiceNow, gathers metrics from Datadog, and publishes postmortem to Confluence."
  tags:
    - operations
    - servicenow
    - datadog
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: incident-postmortem
      port: 8080
      tools:
        - name: incident-postmortem
          description: "Collects incident data from ServiceNow."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: check-metrics
              type: call
              call: "datadog.get-monitors"
              with:
                entity_id: "{{entity_id}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Incident Postmortem for {{entity_id}}"
            - name: publish
              type: call
              call: "confluence.create-page"
              with:
                space_key: "OPS"
                title: "Incident Postmortem"
  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"
          operations:
            - name: get-monitors
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.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
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://capitalone.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST

Queries Informatica Intelligent Cloud Services for failed mapping tasks in a given time window and creates Jira tickets for each failure requiring investigation.

naftiko: "0.5"
info:
  label: "Informatica Data Pipeline Health Check"
  description: "Queries Informatica Intelligent Cloud Services for failed mapping tasks in a given time window and creates Jira tickets for each failure requiring investigation."
  tags:
    - data
    - informatica
    - jira
    - data-pipeline
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: data-pipeline-ops
      port: 8080
      tools:
        - name: check-informatica-pipeline-health
          description: "Given a time window in hours, list failed Informatica mapping tasks and create a Jira ticket for each failure. Use for daily ETL health reviews."
          inputParameters:
            - name: hours_back
              in: body
              type: integer
              description: "Number of hours back to look for failed tasks."
            - name: project_key
              in: body
              type: string
              description: "Jira project key for creating failure tickets."
          steps:
            - name: list-failed-tasks
              type: call
              call: "informatica.list-activity-log"
              with:
                status: "FAILED"
                hoursBack: "{{hours_back}}"
            - name: create-jira-ticket
              type: call
              call: "jira-etl.create-issue"
              with:
                summary: "Informatica task failure: {{list-failed-tasks.objectName}}"
                description: "Task {{list-failed-tasks.objectName}} failed at {{list-failed-tasks.startTime}}."
                project: "{{project_key}}"
                issuetype: "Bug"
  consumes:
    - type: http
      namespace: informatica
      baseUri: "https://dm-us.informaticacloud.com/saas/api/v2"
      authentication:
        type: bearer
        token: "$secrets.informatica_token"
      resources:
        - name: activity-log
          path: "/activity/activityLog"
          inputParameters:
            - name: status
              in: query
            - name: hoursBack
              in: query
          operations:
            - name: list-activity-log
              method: GET
    - type: http
      namespace: jira-etl
      baseUri: "https://capitalone.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_token"
      resources:
        - name: issue
          path: "/issue"
          inputParameters:
            - name: summary
              in: body
            - name: description
              in: body
            - name: project
              in: body
            - name: issuetype
              in: body
          operations:
            - name: create-issue
              method: POST

Retrieves pipeline execution status from Informatica.

naftiko: "0.5"
info:
  label: "Informatica Data Pipeline Status Lookup"
  description: "Retrieves pipeline execution status from Informatica."
  tags:
    - data
    - informatica
capability:
  exposes:
    - type: mcp
      namespace: data-pipelines
      port: 8080
      tools:
        - name: get-pipeline-status
          description: "Look up Informatica pipeline execution status."
          inputParameters:
            - name: pipeline_id
              in: body
              type: string
              description: "Informatica pipeline ID."
          call: "informatica.get-run"
          with:
            pipeline_id: "{{pipeline_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: rows_processed
              type: number
              mapping: "$.rowsProcessed"
  consumes:
    - type: http
      namespace: informatica
      baseUri: "https://dm-us.informaticacloud.com/saas/api/v2"
      authentication:
        type: bearer
        token: "$secrets.informatica_token"
      resources:
        - name: runs
          path: "/activity/activityMonitor/{{pipeline_id}}"
          inputParameters:
            - name: pipeline_id
              in: path
          operations:
            - name: get-run
              method: GET

Queries Jira for completed sprint stories across a project, computes velocity, and posts a summary to a Microsoft Teams engineering channel.

naftiko: "0.5"
info:
  label: "Jira Sprint Velocity Report"
  description: "Queries Jira for completed sprint stories across a project, computes velocity, and posts a summary to a Microsoft Teams engineering channel."
  tags:
    - agile
    - jira
    - microsoft-teams
    - reporting
    - engineering
capability:
  exposes:
    - type: mcp
      namespace: agile-reporting
      port: 8080
      tools:
        - name: publish-sprint-velocity-report
          description: "Given a Jira project key and board ID, retrieve the last completed sprint's story points and post a velocity digest to Teams. Use for sprint review preparation or engineering metrics."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "The Jira project key (e.g., CAPTECH)."
            - name: board_id
              in: body
              type: string
              description: "The Jira board ID for sprint data."
            - name: teams_channel
              in: body
              type: string
              description: "The Teams channel email or ID for the engineering digest."
          steps:
            - name: get-sprint-data
              type: call
              call: "jira-sprint.get-sprint-report"
              with:
                boardId: "{{board_id}}"
                state: "closed"
            - name: post-velocity
              type: call
              call: "msteams-agile.send-message"
              with:
                recipient: "{{teams_channel}}"
                message: "Sprint {{get-sprint-data.sprintName}} velocity: {{get-sprint-data.completedPoints}} story points completed."
  consumes:
    - type: http
      namespace: jira-sprint
      baseUri: "https://capitalone.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_token"
      resources:
        - name: sprint-report
          path: "/board/{boardId}/sprint"
          inputParameters:
            - name: boardId
              in: path
            - name: state
              in: query
          operations:
            - name: get-sprint-report
              method: GET
    - type: http
      namespace: msteams-agile
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: send-mail
          path: "/users/{recipient}/sendMail"
          inputParameters:
            - name: recipient
              in: path
            - name: message
              in: body
          operations:
            - name: send-message
              method: POST

Processes loan applications by running credit models in Databricks, updating Snowflake, and notifying via email.

naftiko: "0.5"
info:
  label: "Loan Origination Pipeline Orchestrator"
  description: "Processes loan applications by running credit models in Databricks, updating Snowflake, and notifying via email."
  tags:
    - banking
    - databricks
    - snowflake
    - email
capability:
  exposes:
    - type: mcp
      namespace: loan-origination-pipeline
      port: 8080
      tools:
        - name: loan-origination-pipeline
          description: "Processes loan applications by running credit models in Databricks."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                entity_id: "{{entity_id}}"
            - name: run-model
              type: call
              call: "databricks.run-job"
              with:
                entity_id: "{{entity_id}}"
            - name: send-email
              type: call
              call: "email.send-message"
              with:
                to: "team@capitalone.com"
                subject: "Loan Origination Pipeline"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://capitalone.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
            - name: run-analysis
              method: POST
    - type: http
      namespace: databricks
      baseUri: "https://capitalone.cloud.databricks.com/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: email
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.graph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-message
              method: POST

Triggers a Looker Look or dashboard tile refresh for a given content ID and posts the updated embed URL to a Teams channel for executive reporting.

naftiko: "0.5"
info:
  label: "Looker Embedded Report Refresh"
  description: "Triggers a Looker Look or dashboard tile refresh for a given content ID and posts the updated embed URL to a Teams channel for executive reporting."
  tags:
    - data
    - looker
    - microsoft-teams
    - reporting
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: embedded-analytics
      port: 8080
      tools:
        - name: refresh-looker-report
          description: "Given a Looker Look ID, run the query and post the refreshed embed URL to a Teams channel. Use for scheduled executive dashboard updates."
          inputParameters:
            - name: look_id
              in: body
              type: string
              description: "The Looker Look ID to refresh."
            - name: teams_channel_email
              in: body
              type: string
              description: "Teams channel recipient email for embed URL notification."
          steps:
            - name: run-look
              type: call
              call: "looker.run-look"
              with:
                lookId: "{{look_id}}"
                result_format: "json"
            - name: notify-teams
              type: call
              call: "msteams-looker.send-message"
              with:
                recipient: "{{teams_channel_email}}"
                message: "Looker report {{look_id}} has been refreshed. View at: {{run-look.embedUrl}}"
  consumes:
    - type: http
      namespace: looker
      baseUri: "https://capitalone.cloud.looker.com/api/4.0"
      authentication:
        type: bearer
        token: "$secrets.looker_token"
      resources:
        - name: look
          path: "/looks/{lookId}/run/{result_format}"
          inputParameters:
            - name: lookId
              in: path
            - name: result_format
              in: path
          operations:
            - name: run-look
              method: GET
    - type: http
      namespace: msteams-looker
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: send-mail
          path: "/users/{recipient}/sendMail"
          inputParameters:
            - name: recipient
              in: path
            - name: message
              in: body
          operations:
            - name: send-message
              method: POST

Aggregates campaign data from Google Ads, analyzes in Snowflake, and publishes insights to Confluence.

naftiko: "0.5"
info:
  label: "Marketing Campaign Performance Orchestrator"
  description: "Aggregates campaign data from Google Ads, analyzes in Snowflake, and publishes insights to Confluence."
  tags:
    - marketing
    - google-ads
    - snowflake
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: marketing-campaign-performance
      port: 8080
      tools:
        - name: marketing-campaign-performance
          description: "Aggregates campaign data from Google Ads."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                entity_id: "{{entity_id}}"
            - name: publish
              type: call
              call: "confluence.create-page"
              with:
                space_key: "OPS"
                title: "Marketing Campaign Performance"
            - name: get-campaign
              type: call
              call: "google-ads.get-campaign"
              with:
                entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://capitalone.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
            - name: run-analysis
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://capitalone.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: google-ads
      baseUri: "https://googleads.googleapis.com/v14"
      authentication:
        type: bearer
        token: "$secrets.google_ads_token"
      resources:
        - name: campaigns
          path: "/customers/{{customer_id}}/campaigns"
          operations:
            - name: get-campaign
              method: GET

Processes card disputes by gathering transaction data from Snowflake, creating Jira tickets, and notifying customers.

naftiko: "0.5"
info:
  label: "Merchant Dispute Resolution Orchestrator"
  description: "Processes card disputes by gathering transaction data from Snowflake, creating Jira tickets, and notifying customers."
  tags:
    - banking
    - snowflake
    - jira
    - email
capability:
  exposes:
    - type: mcp
      namespace: merchant-dispute-resolution
      port: 8080
      tools:
        - name: merchant-dispute-resolution
          description: "Processes card disputes by gathering transaction data from Snowflake."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                entity_id: "{{entity_id}}"
            - name: create-issue
              type: call
              call: "jira.create-issue"
              with:
                project: "OPS"
                summary: "Merchant Dispute Resolution - {{entity_id}}"
            - name: send-email
              type: call
              call: "email.send-message"
              with:
                to: "team@capitalone.com"
                subject: "Merchant Dispute Resolution"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://capitalone.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
            - name: run-analysis
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://capitalone.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: email
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.graph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-message
              method: POST

Collects Datadog service metrics, validates SLOs, and publishes health report to Confluence.

naftiko: "0.5"
info:
  label: "Microservice Health Dashboard Orchestrator"
  description: "Collects Datadog service metrics, validates SLOs, and publishes health report to Confluence."
  tags:
    - observability
    - datadog
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: microservice-health-dashboard
      port: 8080
      tools:
        - name: microservice-health-dashboard
          description: "Collects Datadog service metrics."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: check-metrics
              type: call
              call: "datadog.get-monitors"
              with:
                entity_id: "{{entity_id}}"
            - name: publish
              type: call
              call: "confluence.create-page"
              with:
                space_key: "OPS"
                title: "Microservice Health Dashboard"
  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"
          operations:
            - name: get-monitors
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://capitalone.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST

Validates ML model performance in Databricks, logs governance events in ServiceNow, and notifies data science team.

naftiko: "0.5"
info:
  label: "ML Model Governance Orchestrator"
  description: "Validates ML model performance in Databricks, logs governance events in ServiceNow, and notifies data science team."
  tags:
    - ml
    - databricks
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: ml-model-governance
      port: 8080
      tools:
        - name: ml-model-governance
          description: "Validates ML model performance in Databricks."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: run-model
              type: call
              call: "databricks.run-job"
              with:
                entity_id: "{{entity_id}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "ML Model Governance for {{entity_id}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#ops"
                text: "ML Model Governance processed for {{entity_id}}"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://capitalone.cloud.databricks.com/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.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
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Detects mobile app crashes via Datadog, creates Jira bugs, and notifies the mobile team via Slack.

naftiko: "0.5"
info:
  label: "Mobile App Crash Response Orchestrator"
  description: "Detects mobile app crashes via Datadog, creates Jira bugs, and notifies the mobile team via Slack."
  tags:
    - mobile
    - datadog
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: mobile-app-crash-response
      port: 8080
      tools:
        - name: mobile-app-crash-response
          description: "Detects mobile app crashes via Datadog."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: check-metrics
              type: call
              call: "datadog.get-monitors"
              with:
                entity_id: "{{entity_id}}"
            - name: create-issue
              type: call
              call: "jira.create-issue"
              with:
                project: "OPS"
                summary: "Mobile App Crash Response - {{entity_id}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#ops"
                text: "Mobile App Crash Response processed for {{entity_id}}"
  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"
          operations:
            - name: get-monitors
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://capitalone.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Provisions IT resources for new hires by creating Okta accounts, ServiceNow requests, and Slack welcome messages.

naftiko: "0.5"
info:
  label: "New Hire IT Provisioning Orchestrator"
  description: "Provisions IT resources for new hires by creating Okta accounts, ServiceNow requests, and Slack welcome messages."
  tags:
    - hr
    - okta
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: new-hire-it-provisioning
      port: 8080
      tools:
        - name: new-hire-it-provisioning
          description: "Provisions IT resources for new hires by creating Okta accounts."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "New Hire IT Provisioning for {{entity_id}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#ops"
                text: "New Hire IT Provisioning processed for {{entity_id}}"
            - name: check-access
              type: call
              call: "okta.get-user"
              with:
                entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.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
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: okta
      baseUri: "https://capitalone.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users"
          operations:
            - name: get-user
              method: GET

Queries New Relic for application transaction error rates and Apdex scores across a service tier, then publishes a daily performance summary to the engineering Slack channel.

naftiko: "0.5"
info:
  label: "New Relic APM Performance Digest"
  description: "Queries New Relic for application transaction error rates and Apdex scores across a service tier, then publishes a daily performance summary to the engineering Slack channel."
  tags:
    - observability
    - new-relic
    - slack
    - apm
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: apm-reporting
      port: 8080
      tools:
        - name: digest-apm-performance
          description: "Given a New Relic application name and time window, retrieve error rate and Apdex scores and post a performance digest to Slack. Use for daily engineering health reviews."
          inputParameters:
            - name: app_name
              in: body
              type: string
              description: "The New Relic application name to report on."
            - name: time_window_hours
              in: body
              type: integer
              description: "Number of hours to include in the performance digest."
            - name: slack_channel
              in: body
              type: string
              description: "Slack channel ID for the digest notification."
          steps:
            - name: get-app-metrics
              type: call
              call: "newrelic.get-metric-data"
              with:
                appName: "{{app_name}}"
                timeWindowHours: "{{time_window_hours}}"
            - name: post-digest
              type: call
              call: "slack-apm.post-message"
              with:
                channel: "{{slack_channel}}"
                text: "APM Digest for {{app_name}}: Error rate {{get-app-metrics.errorRate}}%, Apdex {{get-app-metrics.apdexScore}} over last {{time_window_hours}}h."
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: apikey
        key: "X-Api-Key"
        value: "$secrets.newrelic_api_key"
        placement: header
      resources:
        - name: metric-data
          path: "/applications.json"
          inputParameters:
            - name: appName
              in: query
            - name: timeWindowHours
              in: query
          operations:
            - name: get-metric-data
              method: GET
    - type: http
      namespace: slack-apm
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: message
          path: "/chat.postMessage"
          inputParameters:
            - name: channel
              in: body
            - name: text
              in: body
          operations:
            - name: post-message
              method: POST

Retrieves browser performance metrics from New Relic.

naftiko: "0.5"
info:
  label: "New Relic Browser Performance Lookup"
  description: "Retrieves browser performance metrics from New Relic."
  tags:
    - observability
    - new-relic
capability:
  exposes:
    - type: mcp
      namespace: browser-perf
      port: 8080
      tools:
        - name: get-browser-metrics
          description: "Look up New Relic browser performance."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "New Relic browser app ID."
          call: "newrelic.get-browser-app"
          with:
            app_id: "{{app_id}}"
          outputParameters:
            - name: page_load_time
              type: number
              mapping: "$.browser_application.browser_summary.page_load_time"
            - name: ajax_response_time
              type: number
              mapping: "$.browser_application.browser_summary.ajax_response_time"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: apikey
        key: "X-Api-Key"
        value: "$secrets.newrelic_api_key"
        placement: header
      resources:
        - name: browser
          path: "/browser_applications/{{app_id}}.json"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: get-browser-app
              method: GET

Retrieves MFA enrollment status for a user in Okta.

naftiko: "0.5"
info:
  label: "Okta MFA Status Lookup"
  description: "Retrieves MFA enrollment status for a user in Okta."
  tags:
    - identity
    - okta
capability:
  exposes:
    - type: mcp
      namespace: mfa-status
      port: 8080
      tools:
        - name: get-mfa-status
          description: "Look up Okta MFA enrollment status."
          inputParameters:
            - name: user_email
              in: body
              type: string
              description: "User email address."
          call: "okta.get-user-factors"
          with:
            email: "{{user_email}}"
          outputParameters:
            - name: factor_count
              type: number
              mapping: "$.length"
            - name: enrolled
              type: string
              mapping: "$.enrolled"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://capitalone.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: factors
          path: "/users/{{email}}/factors"
          inputParameters:
            - name: email
              in: path
          operations:
            - name: get-user-factors
              method: GET

Monitors open banking API performance via Datadog, detects anomalies, and creates ServiceNow incidents.

naftiko: "0.5"
info:
  label: "Open Banking API Monitoring Orchestrator"
  description: "Monitors open banking API performance via Datadog, detects anomalies, and creates ServiceNow incidents."
  tags:
    - banking
    - datadog
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: open-banking-api-monitoring
      port: 8080
      tools:
        - name: open-banking-api-monitoring
          description: "Monitors open banking API performance via Datadog."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: check-metrics
              type: call
              call: "datadog.get-monitors"
              with:
                entity_id: "{{entity_id}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Open Banking API Monitoring for {{entity_id}}"
  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"
          operations:
            - name: get-monitors
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.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
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST

When a new Salesforce Service Cloud case is opened, uses OpenAI to draft an initial customer response based on the case description and relevant knowledge base articles.

naftiko: "0.5"
info:
  label: "OpenAI Customer Support Response Drafter"
  description: "When a new Salesforce Service Cloud case is opened, uses OpenAI to draft an initial customer response based on the case description and relevant knowledge base articles."
  tags:
    - ai
    - customer-support
    - openai
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: support-ai
      port: 8080
      tools:
        - name: draft-customer-support-response
          description: "Given a Salesforce case ID, fetch the case details and use OpenAI to generate a draft customer response. Update the case with the draft for agent review. Use for first-response SLA optimization."
          inputParameters:
            - name: case_id
              in: body
              type: string
              description: "The Salesforce Service Cloud case ID."
          steps:
            - name: get-case
              type: call
              call: "salesforce-case.get-case"
              with:
                caseId: "{{case_id}}"
            - name: draft-response
              type: call
              call: "openai.create-completion"
              with:
                model: "gpt-4o"
                messages: "[{\"role\": \"system\", \"content\": \"You are a Capital One customer support agent.\"}, {\"role\": \"user\", \"content\": \"Draft a professional response to this customer case: {{get-case.description}}\"}]"
            - name: update-case
              type: call
              call: "salesforce-case-update.update-case"
              with:
                caseId: "{{case_id}}"
                internalComments: "AI Draft: {{draft-response.choices.0.message.content}}"
  consumes:
    - type: http
      namespace: salesforce-case
      baseUri: "https://capitalone.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: case
          path: "/sobjects/Case/{caseId}"
          inputParameters:
            - name: caseId
              in: path
          operations:
            - name: get-case
              method: GET
    - type: http
      namespace: openai
      baseUri: "https://api.openai.com/v1"
      authentication:
        type: bearer
        token: "$secrets.openai_api_key"
      resources:
        - name: completion
          path: "/chat/completions"
          inputParameters:
            - name: model
              in: body
            - name: messages
              in: body
          operations:
            - name: create-completion
              method: POST
    - type: http
      namespace: salesforce-case-update
      baseUri: "https://capitalone.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: case
          path: "/sobjects/Case/{caseId}"
          inputParameters:
            - name: caseId
              in: path
            - name: internalComments
              in: body
          operations:
            - name: update-case
              method: PATCH

Retrieves budget data from Oracle Hyperion for a cost center.

naftiko: "0.5"
info:
  label: "Oracle Hyperion Budget Lookup"
  description: "Retrieves budget data from Oracle Hyperion for a cost center."
  tags:
    - finance
    - oracle-hyperion
capability:
  exposes:
    - type: mcp
      namespace: budget-data
      port: 8080
      tools:
        - name: get-budget-data
          description: "Look up Oracle Hyperion budget for a cost center."
          inputParameters:
            - name: cost_center
              in: body
              type: string
              description: "Cost center code."
          call: "hyperion.get-budget"
          with:
            cost_center: "{{cost_center}}"
          outputParameters:
            - name: budget_amount
              type: number
              mapping: "$.data.budget"
            - name: actual_amount
              type: number
              mapping: "$.data.actual"
  consumes:
    - type: http
      namespace: hyperion
      baseUri: "https://hyperion.capitalone.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.hyperion_token"
      resources:
        - name: budgets
          path: "/planning/budget/{{cost_center}}"
          inputParameters:
            - name: cost_center
              in: path
          operations:
            - name: get-budget
              method: GET

Pulls actuals from Oracle EBS and budget data from Oracle Hyperion, computes variance by cost center, and publishes a Power BI dashboard refresh.

naftiko: "0.5"
info:
  label: "Oracle Hyperion Budget Variance Report"
  description: "Pulls actuals from Oracle EBS and budget data from Oracle Hyperion, computes variance by cost center, and publishes a Power BI dashboard refresh."
  tags:
    - finance
    - budgeting
    - oracle-hyperion
    - oracle-ebs
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: finance-reporting
      port: 8080
      tools:
        - name: publish-budget-variance-report
          description: "Given a fiscal period and cost center, fetch actuals from Oracle EBS, compare to Hyperion budget targets, and trigger a Power BI dataset refresh. Use for monthly close reporting."
          inputParameters:
            - name: fiscal_period
              in: body
              type: string
              description: "The fiscal period in YYYY-MM format."
            - name: cost_center
              in: body
              type: string
              description: "The cost center code to report on."
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID to refresh."
          steps:
            - name: get-actuals
              type: call
              call: "oracle-ebs.get-actuals"
              with:
                fiscalPeriod: "{{fiscal_period}}"
                costCenter: "{{cost_center}}"
            - name: get-budget
              type: call
              call: "oracle-hyperion.get-budget"
              with:
                fiscalPeriod: "{{fiscal_period}}"
                costCenter: "{{cost_center}}"
            - name: refresh-dataset
              type: call
              call: "powerbi.trigger-refresh"
              with:
                datasetId: "{{dataset_id}}"
  consumes:
    - type: http
      namespace: oracle-ebs
      baseUri: "https://capitalone-ebs.oraclecloud.com/fscmRestApi/resources/11.13.18.05"
      authentication:
        type: bearer
        token: "$secrets.oracle_ebs_token"
      resources:
        - name: actuals
          path: "/generalLedgerJournalEntries"
          inputParameters:
            - name: fiscalPeriod
              in: query
            - name: costCenter
              in: query
          operations:
            - name: get-actuals
              method: GET
    - type: http
      namespace: oracle-hyperion
      baseUri: "https://capitalone-hyperion.oraclecloud.com/HyperionPlanning/rest/v3"
      authentication:
        type: bearer
        token: "$secrets.hyperion_token"
      resources:
        - name: budget
          path: "/applications/Planning/plans"
          inputParameters:
            - name: fiscalPeriod
              in: query
            - name: costCenter
              in: query
          operations:
            - name: get-budget
              method: GET
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-refresh
          path: "/datasets/{datasetId}/refreshes"
          inputParameters:
            - name: datasetId
              in: path
          operations:
            - name: trigger-refresh
              method: POST

Queries Palo Alto Networks for firewall rules modified in the last 24 hours, cross-references with ServiceNow approved changes, and flags unauthorized modifications.

naftiko: "0.5"
info:
  label: "Palo Alto Firewall Policy Audit"
  description: "Queries Palo Alto Networks for firewall rules modified in the last 24 hours, cross-references with ServiceNow approved changes, and flags unauthorized modifications."
  tags:
    - security
    - palo-alto-networks
    - servicenow
    - compliance
    - audit
capability:
  exposes:
    - type: mcp
      namespace: security-audit
      port: 8080
      tools:
        - name: audit-firewall-policy-changes
          description: "Retrieve recent Palo Alto firewall rule changes and compare against ServiceNow approved change requests. Create a ServiceNow security incident for any unauthorized modifications."
          inputParameters:
            - name: hours_back
              in: body
              type: integer
              description: "Number of hours to look back for firewall rule changes."
          steps:
            - name: get-fw-changes
              type: call
              call: "paloalto-audit.get-config-audit"
              with:
                hoursBack: "{{hours_back}}"
            - name: check-change-approval
              type: call
              call: "servicenow-audit.get-approved-changes"
              with:
                timeWindow: "{{hours_back}}"
            - name: create-security-incident
              type: call
              call: "servicenow-si.create-security-incident"
              with:
                short_description: "Unauthorized firewall change detected"
                description: "Firewall rule {{get-fw-changes.ruleName}} modified without matching approved change."
                category: "Security"
                urgency: "1"
  consumes:
    - type: http
      namespace: paloalto-audit
      baseUri: "https://capitalone-pa.example.com/restapi/v10.1"
      authentication:
        type: apikey
        key: "X-PAN-KEY"
        value: "$secrets.paloalto_api_key"
        placement: header
      resources:
        - name: config-audit
          path: "/Objects/SecurityRules"
          inputParameters:
            - name: hoursBack
              in: query
          operations:
            - name: get-config-audit
              method: GET
    - type: http
      namespace: servicenow-audit
      baseUri: "https://capitalone.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: approved-changes
          path: "/table/change_request"
          inputParameters:
            - name: timeWindow
              in: query
            - name: state
              in: query
          operations:
            - name: get-approved-changes
              method: GET
    - type: http
      namespace: servicenow-si
      baseUri: "https://capitalone.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: security-incident
          path: "/table/sn_si_incident"
          inputParameters:
            - name: short_description
              in: body
            - name: description
              in: body
            - name: category
              in: body
            - name: urgency
              in: body
          operations:
            - name: create-security-incident
              method: POST

Retrieves firewall rule details from Palo Alto Networks Panorama.

naftiko: "0.5"
info:
  label: "Palo Alto Firewall Rule Lookup"
  description: "Retrieves firewall rule details from Palo Alto Networks Panorama."
  tags:
    - security
    - palo-alto-networks
capability:
  exposes:
    - type: mcp
      namespace: firewall-rules
      port: 8080
      tools:
        - name: get-rule-details
          description: "Look up Palo Alto firewall rule."
          inputParameters:
            - name: rule_name
              in: body
              type: string
              description: "Firewall rule name."
          call: "paloalto.get-rule"
          with:
            rule_name: "{{rule_name}}"
          outputParameters:
            - name: action
              type: string
              mapping: "$.result.action"
            - name: source_zones
              type: string
              mapping: "$.result.from"
  consumes:
    - type: http
      namespace: paloalto
      baseUri: "https://panorama.capitalone.com/restapi/v10.1"
      authentication:
        type: bearer
        token: "$secrets.paloalto_token"
      resources:
        - name: rules
          path: "/Policies/SecurityRules"
          operations:
            - name: get-rule
              method: GET

Monitors payment latency via Datadog, creates ServiceNow incidents for SLA breaches, and alerts operations.

naftiko: "0.5"
info:
  label: "Payment Processing Latency Orchestrator"
  description: "Monitors payment latency via Datadog, creates ServiceNow incidents for SLA breaches, and alerts operations."
  tags:
    - banking
    - datadog
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: payment-processing-latency
      port: 8080
      tools:
        - name: payment-processing-latency
          description: "Monitors payment latency via Datadog."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: check-metrics
              type: call
              call: "datadog.get-monitors"
              with:
                entity_id: "{{entity_id}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Payment Processing Latency for {{entity_id}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#ops"
                text: "Payment Processing Latency processed for {{entity_id}}"
  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"
          operations:
            - name: get-monitors
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.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
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Runs PCI compliance scans, logs findings in ServiceNow, and creates Jira remediation tickets.

naftiko: "0.5"
info:
  label: "PCI Compliance Scan Orchestrator"
  description: "Runs PCI compliance scans, logs findings in ServiceNow, and creates Jira remediation tickets."
  tags:
    - compliance
    - servicenow
    - jira
capability:
  exposes:
    - type: mcp
      namespace: pci-compliance-scan
      port: 8080
      tools:
        - name: pci-compliance-scan
          description: "Runs PCI compliance scans."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "PCI Compliance Scan for {{entity_id}}"
            - name: create-issue
              type: call
              call: "jira.create-issue"
              with:
                project: "OPS"
                summary: "PCI Compliance Scan - {{entity_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.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
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://capitalone.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Retrieves revenue metrics from a Power BI dataset.

naftiko: "0.5"
info:
  label: "Power BI Revenue Dashboard Lookup"
  description: "Retrieves revenue metrics from a Power BI dataset."
  tags:
    - analytics
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: revenue-analytics
      port: 8080
      tools:
        - name: get-revenue-metrics
          description: "Look up revenue metrics from Power BI."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "Power BI dataset ID."
          call: "powerbi.get-dataset-value"
          with:
            dataset_id: "{{dataset_id}}"
          outputParameters:
            - name: total_revenue
              type: number
              mapping: "$.value[0].total_revenue"
            - name: yoy_growth
              type: number
              mapping: "$.value[0].yoy_growth_pct"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/executeQueries"
          operations:
            - name: get-dataset-value
              method: POST

Aggregates KPIs from Snowflake, creates executive slides, and distributes via email.

naftiko: "0.5"
info:
  label: "Quarterly Business Review Orchestrator"
  description: "Aggregates KPIs from Snowflake, creates executive slides, and distributes via email."
  tags:
    - analytics
    - snowflake
    - email
capability:
  exposes:
    - type: mcp
      namespace: quarterly-business-review
      port: 8080
      tools:
        - name: quarterly-business-review
          description: "Aggregates KPIs from Snowflake."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                entity_id: "{{entity_id}}"
            - name: send-email
              type: call
              call: "email.send-message"
              with:
                to: "team@capitalone.com"
                subject: "Quarterly Business Review"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://capitalone.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
            - name: run-analysis
              method: POST
    - type: http
      namespace: email
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.graph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-message
              method: POST

Runs stress test scenarios in Snowflake, compiles results, and publishes reports to Confluence.

naftiko: "0.5"
info:
  label: "Quarterly Stress Test Orchestrator"
  description: "Runs stress test scenarios in Snowflake, compiles results, and publishes reports to Confluence."
  tags:
    - risk
    - snowflake
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: quarterly-stress-test
      port: 8080
      tools:
        - name: quarterly-stress-test
          description: "Runs stress test scenarios in Snowflake."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                entity_id: "{{entity_id}}"
            - name: publish
              type: call
              call: "confluence.create-page"
              with:
                space_key: "OPS"
                title: "Quarterly Stress Test"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://capitalone.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
            - name: run-analysis
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://capitalone.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST

Monitors payment transactions via Datadog, triggers fraud model in Databricks, and alerts operations via Slack.

naftiko: "0.5"
info:
  label: "Real-Time Payment Fraud Detection Orchestrator"
  description: "Monitors payment transactions via Datadog, triggers fraud model in Databricks, and alerts operations via Slack."
  tags:
    - fraud
    - datadog
    - databricks
    - slack
capability:
  exposes:
    - type: mcp
      namespace: real-time-payment-fraud-detect
      port: 8080
      tools:
        - name: real-time-payment-fraud-detection
          description: "Monitors payment transactions via Datadog."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: run-model
              type: call
              call: "databricks.run-job"
              with:
                entity_id: "{{entity_id}}"
            - name: check-metrics
              type: call
              call: "datadog.get-monitors"
              with:
                entity_id: "{{entity_id}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#ops"
                text: "Real-Time Payment Fraud Detection processed for {{entity_id}}"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://capitalone.cloud.databricks.com/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              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: monitors
          path: "/monitor"
          operations:
            - name: get-monitors
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Monitors transaction patterns via Datadog, triggers risk scoring in Databricks, and alerts fraud ops.

naftiko: "0.5"
info:
  label: "Real-Time Transaction Monitoring Orchestrator"
  description: "Monitors transaction patterns via Datadog, triggers risk scoring in Databricks, and alerts fraud ops."
  tags:
    - fraud
    - datadog
    - databricks
    - slack
capability:
  exposes:
    - type: mcp
      namespace: real-time-transaction-monitori
      port: 8080
      tools:
        - name: real-time-transaction-monitoring
          description: "Monitors transaction patterns via Datadog."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: run-model
              type: call
              call: "databricks.run-job"
              with:
                entity_id: "{{entity_id}}"
            - name: check-metrics
              type: call
              call: "datadog.get-monitors"
              with:
                entity_id: "{{entity_id}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#ops"
                text: "Real-Time Transaction Monitoring processed for {{entity_id}}"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://capitalone.cloud.databricks.com/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/run-now"
          operations:
            - name: run-job
              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: monitors
          path: "/monitor"
          operations:
            - name: get-monitors
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

When a new job requisition is opened in Workday, automatically posts the role to LinkedIn Jobs to accelerate talent sourcing.

naftiko: "0.5"
info:
  label: "Recruiting Pipeline to LinkedIn Job Post"
  description: "When a new job requisition is opened in Workday, automatically posts the role to LinkedIn Jobs to accelerate talent sourcing."
  tags:
    - hr
    - recruiting
    - workday
    - linkedin
capability:
  exposes:
    - type: mcp
      namespace: recruiting
      port: 8080
      tools:
        - name: publish-job-to-linkedin
          description: "Given a Workday job requisition ID, fetch the job details and post the opening to LinkedIn Jobs. Invoke when a new Capital One requisition needs external sourcing."
          inputParameters:
            - name: requisition_id
              in: body
              type: string
              description: "The Workday job requisition ID."
          steps:
            - name: get-requisition
              type: call
              call: "workday-req.get-job-requisition"
              with:
                requisitionId: "{{requisition_id}}"
            - name: post-linkedin-job
              type: call
              call: "linkedin.create-job-posting"
              with:
                title: "{{get-requisition.title}}"
                description: "{{get-requisition.description}}"
                location: "{{get-requisition.location}}"
                company: "Capital One"
  consumes:
    - type: http
      namespace: workday-req
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: job-requisition
          path: "/jobRequisitions/{requisitionId}"
          inputParameters:
            - name: requisitionId
              in: path
          operations:
            - name: get-job-requisition
              method: GET
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: job-posting
          path: "/jobPostings"
          inputParameters:
            - name: title
              in: body
            - name: description
              in: body
            - name: location
              in: body
            - name: company
              in: body
          operations:
            - name: create-job-posting
              method: POST

Uses Anthropic to summarize new regulatory guidance documents stored in SharePoint and publishes a digest to a Microsoft Teams compliance channel.

naftiko: "0.5"
info:
  label: "Regulatory Compliance Document Summarizer"
  description: "Uses Anthropic to summarize new regulatory guidance documents stored in SharePoint and publishes a digest to a Microsoft Teams compliance channel."
  tags:
    - ai
    - compliance
    - anthropic
    - sharepoint
    - microsoft-teams
    - financial-services
capability:
  exposes:
    - type: mcp
      namespace: compliance-ai
      port: 8080
      tools:
        - name: summarize-regulatory-document
          description: "Given a SharePoint document ID containing regulatory guidance, fetch the document text, send it to Anthropic for summarization, and post the summary to a Teams compliance channel. Use when new regulatory documents need rapid review."
          inputParameters:
            - name: document_id
              in: body
              type: string
              description: "The SharePoint document ID to summarize."
            - name: teams_channel_id
              in: body
              type: string
              description: "The Microsoft Teams channel ID for posting the compliance summary."
          steps:
            - name: get-document
              type: call
              call: "sharepoint.get-file-content"
              with:
                documentId: "{{document_id}}"
            - name: summarize-document
              type: call
              call: "anthropic-comp.create-message"
              with:
                model: "claude-3-5-sonnet-20241022"
                max_tokens: 800
                messages: "[{\"role\": \"user\", \"content\": \"Summarize this regulatory document for a compliance officer: {{get-document.content}}\"}]"
            - name: post-to-teams
              type: call
              call: "msteams-comp.post-channel-message"
              with:
                channelId: "{{teams_channel_id}}"
                message: "Regulatory Summary: {{summarize-document.content}}"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: file-content
          path: "/sites/root/drive/items/{documentId}/content"
          inputParameters:
            - name: documentId
              in: path
          operations:
            - name: get-file-content
              method: GET
    - type: http
      namespace: anthropic-comp
      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"
          inputParameters:
            - name: model
              in: body
            - name: max_tokens
              in: body
            - name: messages
              in: body
          operations:
            - name: create-message
              method: POST
    - type: http
      namespace: msteams-comp
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-message
          path: "/teams/{channelId}/channels/{channelId}/messages"
          inputParameters:
            - name: channelId
              in: path
            - name: message
              in: body
          operations:
            - name: post-channel-message
              method: POST

Compiles regulatory data from Snowflake, validates compliance, and publishes reports to Confluence.

naftiko: "0.5"
info:
  label: "Regulatory Reporting Submission Orchestrator"
  description: "Compiles regulatory data from Snowflake, validates compliance, and publishes reports to Confluence."
  tags:
    - compliance
    - snowflake
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: regulatory-reporting-submissio
      port: 8080
      tools:
        - name: regulatory-reporting-submission
          description: "Compiles regulatory data from Snowflake."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                entity_id: "{{entity_id}}"
            - name: publish
              type: call
              call: "confluence.create-page"
              with:
                space_key: "OPS"
                title: "Regulatory Reporting Submission"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://capitalone.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
            - name: run-analysis
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://capitalone.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST

When a new lead is created in Salesforce CRM, automatically enriches the record with firmographic data from ZoomInfo and updates the lead score.

naftiko: "0.5"
info:
  label: "Salesforce Lead Enrichment via ZoomInfo"
  description: "When a new lead is created in Salesforce CRM, automatically enriches the record with firmographic data from ZoomInfo and updates the lead score."
  tags:
    - crm
    - sales
    - salesforce
    - zoominfo
    - lead-enrichment
capability:
  exposes:
    - type: mcp
      namespace: crm-enrichment
      port: 8080
      tools:
        - name: enrich-salesforce-lead
          description: "Given a Salesforce lead ID, look up the contact in ZoomInfo and update the CRM record with company size, revenue, and industry data. Invoke when a new lead record lacks firmographic details."
          inputParameters:
            - name: lead_id
              in: body
              type: string
              description: "The Salesforce lead ID to enrich."
          steps:
            - name: get-lead
              type: call
              call: "salesforce-read.get-lead"
              with:
                leadId: "{{lead_id}}"
            - name: lookup-zoominfo
              type: call
              call: "zoominfo.search-contact"
              with:
                email: "{{get-lead.email}}"
                company: "{{get-lead.company}}"
            - name: update-lead
              type: call
              call: "salesforce-write.update-lead"
              with:
                leadId: "{{lead_id}}"
                annualRevenue: "{{lookup-zoominfo.revenue}}"
                numberOfEmployees: "{{lookup-zoominfo.employeeCount}}"
                industry: "{{lookup-zoominfo.industry}}"
  consumes:
    - type: http
      namespace: salesforce-read
      baseUri: "https://capitalone.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: lead
          path: "/sobjects/Lead/{leadId}"
          inputParameters:
            - name: leadId
              in: path
          operations:
            - name: get-lead
              method: GET
    - type: http
      namespace: zoominfo
      baseUri: "https://api.zoominfo.com/search"
      authentication:
        type: bearer
        token: "$secrets.zoominfo_token"
      resources:
        - name: contact
          path: "/contact"
          inputParameters:
            - name: email
              in: body
            - name: company
              in: body
          operations:
            - name: search-contact
              method: POST
    - type: http
      namespace: salesforce-write
      baseUri: "https://capitalone.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: lead
          path: "/sobjects/Lead/{leadId}"
          inputParameters:
            - name: leadId
              in: path
            - name: annualRevenue
              in: body
            - name: numberOfEmployees
              in: body
            - name: industry
              in: body
          operations:
            - name: update-lead
              method: PATCH

Queries Salesforce for open opportunities by stage and owner, then publishes a Power BI pipeline digest report for sales leadership review.

naftiko: "0.5"
info:
  label: "Salesforce Opportunity Pipeline Digest"
  description: "Queries Salesforce for open opportunities by stage and owner, then publishes a Power BI pipeline digest report for sales leadership review."
  tags:
    - crm
    - sales
    - salesforce
    - power-bi
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: sales-reporting
      port: 8080
      tools:
        - name: digest-opportunity-pipeline
          description: "Given a sales stage filter and date range, retrieve open Salesforce opportunities and trigger a Power BI dataset refresh. Use for weekly pipeline reviews or executive dashboards."
          inputParameters:
            - name: stage
              in: body
              type: string
              description: "The opportunity stage to filter by (e.g., Proposal, Negotiation)."
            - name: close_date_before
              in: body
              type: string
              description: "Filter opportunities closing before this date (ISO 8601)."
            - name: dataset_id
              in: body
              type: string
              description: "Power BI dataset ID to refresh after query."
          steps:
            - name: query-opportunities
              type: call
              call: "salesforce-opp.query-opportunities"
              with:
                stage: "{{stage}}"
                closeDateBefore: "{{close_date_before}}"
            - name: refresh-powerbi
              type: call
              call: "powerbi-sales.trigger-refresh"
              with:
                datasetId: "{{dataset_id}}"
  consumes:
    - type: http
      namespace: salesforce-opp
      baseUri: "https://capitalone.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/query"
          inputParameters:
            - name: q
              in: query
          operations:
            - name: query-opportunities
              method: GET
    - type: http
      namespace: powerbi-sales
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-refresh
          path: "/datasets/{datasetId}/refreshes"
          inputParameters:
            - name: datasetId
              in: path
          operations:
            - name: trigger-refresh
              method: POST

Retrieves a travel request status from SAP Concur.

naftiko: "0.5"
info:
  label: "SAP Concur Travel Request Lookup"
  description: "Retrieves a travel request status from SAP Concur."
  tags:
    - finance
    - sap-concur
capability:
  exposes:
    - type: mcp
      namespace: travel-requests
      port: 8080
      tools:
        - name: get-travel-request
          description: "Look up SAP Concur travel request status."
          inputParameters:
            - name: request_id
              in: body
              type: string
              description: "Concur travel request ID."
          call: "concur.get-request"
          with:
            request_id: "{{request_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.ApprovalStatusName"
            - name: total_cost
              type: number
              mapping: "$.TotalPostedAmount"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://us.api.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: requests
          path: "/travelrequest/requests/{{request_id}}"
          inputParameters:
            - name: request_id
              in: path
          operations:
            - name: get-request
              method: GET

Rotates application secrets, updates configurations, and logs rotation events in ServiceNow.

naftiko: "0.5"
info:
  label: "Secrets Rotation Orchestrator"
  description: "Rotates application secrets, updates configurations, and logs rotation events in ServiceNow."
  tags:
    - security
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: secrets-rotation
      port: 8080
      tools:
        - name: secrets-rotation
          description: "Rotates application secrets."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Secrets Rotation for {{entity_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.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
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST

Creates a ServiceNow change request for a planned infrastructure change, routes it through the CAB approval workflow, and notifies the change owner via Microsoft Teams.

naftiko: "0.5"
info:
  label: "ServiceNow Change Management Approval"
  description: "Creates a ServiceNow change request for a planned infrastructure change, routes it through the CAB approval workflow, and notifies the change owner via Microsoft Teams."
  tags:
    - itsm
    - servicenow
    - change-management
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: change-mgmt
      port: 8080
      tools:
        - name: submit-change-request
          description: "Given a change description, risk level, and implementation window, create a ServiceNow change request and notify the change owner via Teams. Use before deploying infrastructure changes."
          inputParameters:
            - name: description
              in: body
              type: string
              description: "Description of the planned change."
            - name: risk_level
              in: body
              type: string
              description: "Risk level: low, medium, high."
            - name: start_date
              in: body
              type: string
              description: "Planned implementation start in ISO 8601 format."
            - name: owner_email
              in: body
              type: string
              description: "Email of the change owner for Teams notification."
          steps:
            - name: create-change-request
              type: call
              call: "servicenow-chg.create-change"
              with:
                description: "{{description}}"
                risk: "{{risk_level}}"
                start_date: "{{start_date}}"
            - name: notify-owner
              type: call
              call: "msteams-chg.send-message"
              with:
                recipient: "{{owner_email}}"
                message: "Change request {{create-change-request.changeNumber}} created for {{start_date}}. Risk: {{risk_level}}."
  consumes:
    - type: http
      namespace: servicenow-chg
      baseUri: "https://capitalone.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: change
          path: "/table/change_request"
          inputParameters:
            - name: description
              in: body
            - name: risk
              in: body
            - name: start_date
              in: body
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: msteams-chg
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: send-mail
          path: "/users/{recipient}/sendMail"
          inputParameters:
            - name: recipient
              in: path
            - name: message
              in: body
          operations:
            - name: send-message
              method: POST

Retrieves configuration item details from ServiceNow CMDB.

naftiko: "0.5"
info:
  label: "ServiceNow CMDB CI Lookup"
  description: "Retrieves configuration item details from ServiceNow CMDB."
  tags:
    - infrastructure
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: cmdb-lookup
      port: 8080
      tools:
        - name: get-ci-details
          description: "Look up ServiceNow CMDB configuration item."
          inputParameters:
            - name: ci_name
              in: body
              type: string
              description: "CI name."
          call: "servicenow.get-ci"
          with:
            ci_name: "{{ci_name}}"
          outputParameters:
            - name: sys_id
              type: string
              mapping: "$.result.sys_id"
            - name: category
              type: string
              mapping: "$.result.category"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: cmdb
          path: "/table/cmdb_ci?sysparm_query=name={{ci_name}}"
          operations:
            - name: get-ci
              method: GET

When a Priority 1 incident is raised in ServiceNow, enriches the ticket with Datadog monitor details, assigns to the on-call team, and sends a Slack alert to the incident bridge channel.

naftiko: "0.5"
info:
  label: "ServiceNow P1 Incident Triage"
  description: "When a Priority 1 incident is raised in ServiceNow, enriches the ticket with Datadog monitor details, assigns to the on-call team, and sends a Slack alert to the incident bridge channel."
  tags:
    - itsm
    - servicenow
    - datadog
    - slack
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: itsm-ops
      port: 8080
      tools:
        - name: triage-p1-incident
          description: "Given a ServiceNow P1 incident number, fetch details, query Datadog for correlated monitor states, and post a Slack alert to the incident bridge channel. Invoke for all Priority 1 incidents."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number (e.g., INC0012345)."
            - name: slack_channel
              in: body
              type: string
              description: "The Slack channel ID for incident bridge notifications."
          steps:
            - name: get-incident
              type: call
              call: "servicenow-p1.get-incident"
              with:
                number: "{{incident_number}}"
            - name: get-dd-monitors
              type: call
              call: "datadog-p1.get-monitors"
              with:
                tags: "service:{{get-incident.cmdb_ci}}"
            - name: post-slack-alert
              type: call
              call: "slack.post-message"
              with:
                channel: "{{slack_channel}}"
                text: "P1 INCIDENT: {{incident_number}} - {{get-incident.short_description}}. Datadog monitors: {{get-dd-monitors.count}} alerting."
  consumes:
    - type: http
      namespace: servicenow-p1
      baseUri: "https://capitalone.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: incident
          path: "/table/incident"
          inputParameters:
            - name: number
              in: query
          operations:
            - name: get-incident
              method: GET
    - type: http
      namespace: datadog-p1
      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"
          inputParameters:
            - name: tags
              in: query
          operations:
            - name: get-monitors
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: message
          path: "/chat.postMessage"
          inputParameters:
            - name: channel
              in: body
            - name: text
              in: body
          operations:
            - name: post-message
              method: POST

Retrieves the member count for a Slack channel.

naftiko: "0.5"
info:
  label: "Slack Channel Membership Lookup"
  description: "Retrieves the member count for a Slack channel."
  tags:
    - collaboration
    - slack
capability:
  exposes:
    - type: mcp
      namespace: slack-info
      port: 8080
      tools:
        - name: get-channel-members
          description: "Look up Slack channel member count."
          inputParameters:
            - name: channel_id
              in: body
              type: string
              description: "Slack channel ID."
          call: "slack.get-channel-info"
          with:
            channel: "{{channel_id}}"
          outputParameters:
            - name: member_count
              type: number
              mapping: "$.channel.num_members"
            - name: name
              type: string
              mapping: "$.channel.name"
  consumes:
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: channels
          path: "/conversations.info?channel={{channel_id}}"
          operations:
            - name: get-channel-info
              method: GET

Retrieves credit risk score for a customer segment from Snowflake.

naftiko: "0.5"
info:
  label: "Snowflake Credit Risk Score Lookup"
  description: "Retrieves credit risk score for a customer segment from Snowflake."
  tags:
    - risk
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: credit-risk
      port: 8080
      tools:
        - name: get-risk-score
          description: "Look up credit risk score by customer segment."
          inputParameters:
            - name: segment_id
              in: body
              type: string
              description: "Customer segment ID."
          call: "snowflake.run-query"
          with:
            segment_id: "{{segment_id}}"
          outputParameters:
            - name: risk_score
              type: number
              mapping: "$.data[0][0]"
            - name: confidence
              type: number
              mapping: "$.data[0][1]"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://capitalone.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
            - name: run-analysis
              method: POST

Runs automated data quality checks on a Snowflake table and opens a Jira ticket if row count anomalies or null rate violations are detected.

naftiko: "0.5"
info:
  label: "Snowflake Data Quality Monitor"
  description: "Runs automated data quality checks on a Snowflake table and opens a Jira ticket if row count anomalies or null rate violations are detected."
  tags:
    - data
    - snowflake
    - jira
    - data-quality
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: data-quality
      port: 8080
      tools:
        - name: run-snowflake-quality-check
          description: "Given a Snowflake table name and quality thresholds, execute a row count and null-rate check and create a Jira issue if thresholds are breached. Use for daily data pipeline health monitoring."
          inputParameters:
            - name: table_name
              in: body
              type: string
              description: "The fully qualified Snowflake table name (database.schema.table)."
            - name: min_row_count
              in: body
              type: integer
              description: "Minimum expected row count; alert if actual is lower."
            - name: max_null_rate
              in: body
              type: number
              description: "Maximum acceptable null rate as a decimal (0.0–1.0)."
          steps:
            - name: check-row-count
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT COUNT(*) AS row_count FROM {{table_name}}"
            - name: check-null-rate
              type: call
              call: "snowflake-null.execute-statement"
              with:
                statement: "SELECT AVG(CASE WHEN key_col IS NULL THEN 1.0 ELSE 0.0 END) AS null_rate FROM {{table_name}}"
            - name: create-jira-issue
              type: call
              call: "jira-dq.create-issue"
              with:
                summary: "Data quality violation in {{table_name}}"
                description: "Row count: {{check-row-count.row_count}}, null rate: {{check-null-rate.null_rate}}"
                project: "DATA"
                issuetype: "Bug"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://capitalone.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statement
          path: "/statements"
          inputParameters:
            - name: statement
              in: body
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: snowflake-null
      baseUri: "https://capitalone.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statement
          path: "/statements"
          inputParameters:
            - name: statement
              in: body
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: jira-dq
      baseUri: "https://capitalone.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_token"
      resources:
        - name: issue
          path: "/issue"
          inputParameters:
            - name: summary
              in: body
            - name: description
              in: body
            - name: project
              in: body
            - name: issuetype
              in: body
          operations:
            - name: create-issue
              method: POST

Collects SOC2 compliance evidence from ServiceNow, GitHub, and Okta, then publishes to Confluence.

naftiko: "0.5"
info:
  label: "SOC2 Evidence Collection Orchestrator"
  description: "Collects SOC2 compliance evidence from ServiceNow, GitHub, and Okta, then publishes to Confluence."
  tags:
    - compliance
    - servicenow
    - github
    - okta
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: soc2-evidence-collection
      port: 8080
      tools:
        - name: soc2-evidence-collection
          description: "Collects SOC2 compliance evidence from ServiceNow."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "SOC2 Evidence Collection for {{entity_id}}"
            - name: publish
              type: call
              call: "confluence.create-page"
              with:
                space_key: "OPS"
                title: "SOC2 Evidence Collection"
            - name: check-access
              type: call
              call: "okta.get-user"
              with:
                entity_id: "{{entity_id}}"
            - name: check-repo
              type: call
              call: "github.get-alerts"
              with:
                entity_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.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
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://capitalone.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: okta
      baseUri: "https://capitalone.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users"
          operations:
            - name: get-user
              method: GET
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: repos
          path: "/repos"
          operations:
            - name: get-alerts
              method: GET

Queries Splunk for fraud detection events matching a transaction pattern.

naftiko: "0.5"
info:
  label: "Splunk Fraud Event Lookup"
  description: "Queries Splunk for fraud detection events matching a transaction pattern."
  tags:
    - security
    - splunk
capability:
  exposes:
    - type: mcp
      namespace: fraud-events
      port: 8080
      tools:
        - name: search-fraud-events
          description: "Search Splunk for fraud events."
          inputParameters:
            - name: transaction_pattern
              in: body
              type: string
              description: "Transaction pattern query."
          call: "splunk.search-events"
          with:
            query: "{{transaction_pattern}}"
          outputParameters:
            - name: event_count
              type: number
              mapping: "$.results.length"
            - name: risk_level
              type: string
              mapping: "$.results[0].risk_level"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://splunk.capitalone.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search
          path: "/search/jobs/export"
          operations:
            - name: search-events
              method: GET

When Splunk raises a security alert, enriches the event with Palo Alto Networks threat intelligence and opens a ServiceNow security incident for the SOC team.

naftiko: "0.5"
info:
  label: "Splunk Security Incident Triage"
  description: "When Splunk raises a security alert, enriches the event with Palo Alto Networks threat intelligence and opens a ServiceNow security incident for the SOC team."
  tags:
    - security
    - splunk
    - palo-alto-networks
    - servicenow
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: soc-ops
      port: 8080
      tools:
        - name: triage-splunk-security-alert
          description: "Given a Splunk alert ID and source IP, fetch alert details, query Palo Alto for threat context, and open a ServiceNow security incident. Use for automated SOC Level 1 triage."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "The Splunk alert search ID or SID."
            - name: source_ip
              in: body
              type: string
              description: "The source IP address involved in the alert."
          steps:
            - name: get-alert-details
              type: call
              call: "splunk.get-alert"
              with:
                alertId: "{{alert_id}}"
            - name: get-threat-intel
              type: call
              call: "paloalto.get-threat-intel"
              with:
                sourceIp: "{{source_ip}}"
            - name: create-security-incident
              type: call
              call: "servicenow-soc.create-security-incident"
              with:
                short_description: "Security alert {{alert_id}}: {{get-alert-details.name}}"
                description: "Source IP {{source_ip}} threat score: {{get-threat-intel.threatScore}}"
                category: "Security"
                urgency: "1"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://capitalone-splunk.splunkcloud.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: alert
          path: "/search/jobs/{alertId}/results"
          inputParameters:
            - name: alertId
              in: path
          operations:
            - name: get-alert
              method: GET
    - type: http
      namespace: paloalto
      baseUri: "https://capitalone-pa.example.com/restapi/v10.1"
      authentication:
        type: apikey
        key: "X-PAN-KEY"
        value: "$secrets.paloalto_api_key"
        placement: header
      resources:
        - name: threat-intel
          path: "/Objects/Addresses"
          inputParameters:
            - name: sourceIp
              in: query
          operations:
            - name: get-threat-intel
              method: GET
    - type: http
      namespace: servicenow-soc
      baseUri: "https://capitalone.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_pass"
      resources:
        - name: security-incident
          path: "/table/sn_si_incident"
          inputParameters:
            - name: short_description
              in: body
            - name: description
              in: body
            - name: category
              in: body
            - name: urgency
              in: body
          operations:
            - name: create-security-incident
              method: POST

Retrieves customer analytics dashboard data from Tableau.

naftiko: "0.5"
info:
  label: "Tableau Customer Analytics Lookup"
  description: "Retrieves customer analytics dashboard data from Tableau."
  tags:
    - analytics
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: customer-analytics
      port: 8080
      tools:
        - name: get-analytics-view
          description: "Look up customer analytics from Tableau."
          inputParameters:
            - name: view_id
              in: body
              type: string
              description: "Tableau view ID."
          call: "tableau.get-view-data"
          with:
            view_id: "{{view_id}}"
          outputParameters:
            - name: active_customers
              type: number
              mapping: "$.data[0].active"
            - name: churn_rate
              type: number
              mapping: "$.data[0].churn_pct"
  consumes:
    - type: http
      namespace: tableau
      baseUri: "https://tableau.capitalone.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: views
          path: "/sites/{{site_id}}/views/{{view_id}}/data"
          inputParameters:
            - name: view_id
              in: path
          operations:
            - name: get-view-data
              method: GET

Triggers a Tableau Server workbook extract refresh for a given datasource and notifies the analytics team via Slack when the refresh completes.

naftiko: "0.5"
info:
  label: "Tableau Dashboard Refresh Trigger"
  description: "Triggers a Tableau Server workbook extract refresh for a given datasource and notifies the analytics team via Slack when the refresh completes."
  tags:
    - data
    - tableau
    - slack
    - analytics
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: analytics-ops
      port: 8080
      tools:
        - name: trigger-tableau-refresh
          description: "Given a Tableau datasource ID, trigger an extract refresh job and post a Slack notification when complete. Use before scheduled analytics meetings or after data pipeline updates."
          inputParameters:
            - name: datasource_id
              in: body
              type: string
              description: "The Tableau Server datasource LUID to refresh."
            - name: slack_channel
              in: body
              type: string
              description: "The Slack channel ID to notify on completion."
          steps:
            - name: trigger-refresh
              type: call
              call: "tableau.trigger-extract-refresh"
              with:
                datasourceId: "{{datasource_id}}"
            - name: notify-slack
              type: call
              call: "slack-analytics.post-message"
              with:
                channel: "{{slack_channel}}"
                text: "Tableau datasource {{datasource_id}} refresh job {{trigger-refresh.jobId}} has been triggered."
  consumes:
    - type: http
      namespace: tableau
      baseUri: "https://capitalone-tableau.example.com/api/2.8"
      authentication:
        type: apikey
        key: "X-Tableau-Auth"
        value: "$secrets.tableau_token"
        placement: header
      resources:
        - name: extract-refresh
          path: "/sites/{siteId}/datasources/{datasourceId}/refresh"
          inputParameters:
            - name: siteId
              in: path
            - name: datasourceId
              in: path
          operations:
            - name: trigger-extract-refresh
              method: POST
    - type: http
      namespace: slack-analytics
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: message
          path: "/chat.postMessage"
          inputParameters:
            - name: channel
              in: body
            - name: text
              in: body
          operations:
            - name: post-message
              method: POST

Evaluates third-party risk using Snowflake data, creates assessment records in ServiceNow, and notifies stakeholders.

naftiko: "0.5"
info:
  label: "Third-Party Risk Assessment Orchestrator"
  description: "Evaluates third-party risk using Snowflake data, creates assessment records in ServiceNow, and notifies stakeholders."
  tags:
    - risk
    - snowflake
    - servicenow
    - email
capability:
  exposes:
    - type: mcp
      namespace: third-party-risk-assessment
      port: 8080
      tools:
        - name: third-party-risk-assessment
          description: "Evaluates third-party risk using Snowflake data."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                entity_id: "{{entity_id}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Third-Party Risk Assessment for {{entity_id}}"
            - name: send-email
              type: call
              call: "email.send-message"
              with:
                to: "team@capitalone.com"
                subject: "Third-Party Risk Assessment"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://capitalone.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
            - name: run-analysis
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.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
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: email
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.graph_token"
      resources:
        - name: mail
          path: "/me/sendMail"
          operations:
            - name: send-message
              method: POST

Assesses vendor security posture, logs findings in ServiceNow, and publishes results to Confluence.

naftiko: "0.5"
info:
  label: "Vendor Security Assessment Orchestrator"
  description: "Assesses vendor security posture, logs findings in ServiceNow, and publishes results to Confluence."
  tags:
    - security
    - servicenow
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: vendor-security-assessment
      port: 8080
      tools:
        - name: vendor-security-assessment
          description: "Assesses vendor security posture."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Vendor Security Assessment for {{entity_id}}"
            - name: publish
              type: call
              call: "confluence.create-page"
              with:
                space_key: "OPS"
                title: "Vendor Security Assessment"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://capitalone.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
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://capitalone.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST

Retrieves benefits enrollment status for an employee in Workday.

naftiko: "0.5"
info:
  label: "Workday Benefits Enrollment Lookup"
  description: "Retrieves benefits enrollment status for an employee in Workday."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: benefits-info
      port: 8080
      tools:
        - name: get-benefits-enrollment
          description: "Look up benefits enrollment status."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "Workday employee ID."
          call: "workday.get-benefits"
          with:
            worker_id: "{{employee_id}}"
          outputParameters:
            - name: plan_name
              type: string
              mapping: "$.benefits.current_plan"
            - name: status
              type: string
              mapping: "$.benefits.enrollment_status"
  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: "/capitalone/workers/{{worker_id}}/benefits"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-benefits
              method: GET

Pulls a headcount snapshot from Workday by cost center and department, returning employee count and full-time equivalent figures for workforce planning.

naftiko: "0.5"
info:
  label: "Workday Headcount Snapshot"
  description: "Pulls a headcount snapshot from Workday by cost center and department, returning employee count and full-time equivalent figures for workforce planning."
  tags:
    - hr
    - reporting
    - workday
    - headcount
capability:
  exposes:
    - type: mcp
      namespace: hr-reporting
      port: 8080
      tools:
        - name: get-headcount-snapshot
          description: "Given a Workday cost center ID and optional department, return total headcount and FTE count. Use for workforce planning dashboards or period-end reporting."
          inputParameters:
            - name: cost_center_id
              in: body
              type: string
              description: "The Workday cost center ID to filter headcount."
            - name: department
              in: body
              type: string
              description: "Optional department name to further filter results."
          call: "workday-hc.get-headcount"
          with:
            costCenterId: "{{cost_center_id}}"
            department: "{{department}}"
          outputParameters:
            - name: total_headcount
              type: integer
              mapping: "$.data.totalHeadcount"
            - name: fte_count
              type: number
              mapping: "$.data.fteCount"
  consumes:
    - type: http
      namespace: workday-hc
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: headcount
          path: "/headcount"
          inputParameters:
            - name: costCenterId
              in: query
            - name: department
              in: query
          operations:
            - name: get-headcount
              method: GET

Pulls Workday headcount data, forecasts hiring needs in Snowflake, and publishes plan to Confluence.

naftiko: "0.5"
info:
  label: "Workforce Planning Forecast Orchestrator"
  description: "Pulls Workday headcount data, forecasts hiring needs in Snowflake, and publishes plan to Confluence."
  tags:
    - hr
    - workday
    - snowflake
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: workforce-planning-forecast
      port: 8080
      tools:
        - name: workforce-planning-forecast
          description: "Pulls Workday headcount data."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "Primary entity identifier."
          steps:
            - name: query-data
              type: call
              call: "snowflake.run-query"
              with:
                entity_id: "{{entity_id}}"
            - name: publish
              type: call
              call: "confluence.create-page"
              with:
                space_key: "OPS"
                title: "Workforce Planning Forecast"
            - name: get-worker
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{entity_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://capitalone.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
            - name: run-analysis
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://capitalone.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: content
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/capitalone/workers"
          operations:
            - name: get-worker
              method: GET