Wells Fargo Capabilities

Naftiko 0.5 capability definitions for Wells Fargo - 141 capabilities showing integration workflows and service orchestrations.

Sort
Expand

Orchestrates the closure of a customer account by updating Salesforce, creating a ServiceNow task, running final balance checks in Snowflake, and notifying the relationship manager.

naftiko: "0.5"
info:
  label: "Customer Account Closure Orchestrator"
  description: "Orchestrates the closure of a customer account by updating Salesforce, creating a ServiceNow task, running final balance checks in Snowflake, and notifying the relationship manager."
  tags:
    - operations
    - salesforce
    - servicenow
    - snowflake
    - microsoft-teams
    - banking
capability:
  exposes:
    - type: mcp
      namespace: account-ops
      port: 8080
      tools:
        - name: close-customer-account
          description: "Given a Salesforce account ID and closure reason, update the CRM record, create a ServiceNow closure task, verify zero balance, and notify the RM. Use for account termination requests."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce account ID."
            - name: closure_reason
              in: body
              type: string
              description: "The reason for account closure."
          steps:
            - name: update-crm
              type: call
              call: "salesforce.update-account"
              with:
                account_id: "{{account_id}}"
                status: "Pending Closure"
            - name: create-task
              type: call
              call: "servicenow.create-incident"
              with:
                category: "account_closure"
                short_description: "Account closure: {{account_id}} - {{closure_reason}}"
            - name: verify-balance
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT balance FROM ACCOUNTS.BALANCES WHERE account_id='{{account_id}}'"
            - name: notify-rm
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_rm_channel"
                text: "Account {{account_id}} closure initiated. Task: {{create-task.number}}. Current balance: {{verify-balance.balance}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://wellsfargo.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: update-account
              method: PATCH
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves payroll summary data from ADP for a given pay period and returns total gross pay and headcount.

naftiko: "0.5"
info:
  label: "ADP Payroll Summary Lookup"
  description: "Retrieves payroll summary data from ADP for a given pay period and returns total gross pay and headcount."
  tags:
    - hr
    - adp
    - banking
capability:
  exposes:
    - type: mcp
      namespace: payroll-lookup
      port: 8080
      tools:
        - name: get-payroll-summary
          description: "Given a pay period date, return the total gross pay and employee count from ADP. Use for payroll reconciliation."
          inputParameters:
            - name: pay_period_date
              in: body
              type: string
              description: "The pay period end date in YYYY-MM-DD format."
          call: "adp.get-payroll"
          with:
            pay_date: "{{pay_period_date}}"
          outputParameters:
            - name: total_gross
              type: string
              mapping: "$.payStatements[0].grossPayYTD.amountValue"
            - name: employee_count
              type: integer
              mapping: "$.payStatements.length"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/payroll/v1"
      authentication:
        type: bearer
        token: "$secrets.adp_token"
      resources:
        - name: pay-statements
          path: "/pay-statements?payDate={{pay_date}}"
          inputParameters:
            - name: pay_date
              in: query
          operations:
            - name: get-payroll
              method: GET

Monitors Alteryx workflow execution results, logs output metrics in Snowflake, and notifies the analytics team via Microsoft Teams when workflows fail.

naftiko: "0.5"
info:
  label: "Alteryx Data Prep Workflow Monitor"
  description: "Monitors Alteryx workflow execution results, logs output metrics in Snowflake, and notifies the analytics team via Microsoft Teams when workflows fail."
  tags:
    - analytics
    - alteryx
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: alteryx_data_prep_wo
      port: 8080
      tools:
        - name: alteryx-data
          description: "Given an execution date, run the alteryx data prep workflow monitor process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.ALTERYX_DATA_PREP_WORKFLOW_MONITOR LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.ALTERYX_DATA_PREP_WORKFLOW_MONITOR_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_alteryx_data_prep_wo_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Files a Suspicious Activity Report by extracting transaction patterns from Snowflake, creating a compliance case in Salesforce, uploading documentation to SharePoint, and alerting the BSA team.

naftiko: "0.5"
info:
  label: "AML Suspicious Activity Report Chain"
  description: "Files a Suspicious Activity Report by extracting transaction patterns from Snowflake, creating a compliance case in Salesforce, uploading documentation to SharePoint, and alerting the BSA team."
  tags:
    - compliance
    - aml
    - snowflake
    - salesforce
    - sharepoint
    - microsoft-teams
    - banking
capability:
  exposes:
    - type: mcp
      namespace: bsa-ops
      port: 8080
      tools:
        - name: file-sar
          description: "Given a customer ID and suspicious transaction IDs, extract patterns, create a compliance case, upload supporting docs, and alert BSA. Use when AML monitoring flags suspicious activity."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The customer identifier."
            - name: transaction_ids
              in: body
              type: string
              description: "Comma-separated list of suspicious transaction IDs."
          steps:
            - name: extract-patterns
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "CALL COMPLIANCE.EXTRACT_SAR_PATTERNS('{{customer_id}}', '{{transaction_ids}}')"
            - name: create-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "SAR Filing: Customer {{customer_id}}"
                description: "{{extract-patterns.summary}}"
            - name: upload-docs
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "$secrets.bsa_site_id"
                file_name: "SAR_{{customer_id}}_{{create-case.id}}.pdf"
            - name: alert-bsa
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_bsa_channel"
                text: "SAR filed for customer {{customer_id}}. Case: {{create-case.id}}. Patterns: {{extract-patterns.pattern_count}} flagged transactions."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://wellsfargo.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/sites/{{site_id}}/drive/root:/{{file_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_name
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Screens banking transactions against AML watchlists in Snowflake, creates ServiceNow compliance cases for flagged transactions, and alerts the BSA team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "AML Transaction Screening Workflow"
  description: "Screens banking transactions against AML watchlists in Snowflake, creates ServiceNow compliance cases for flagged transactions, and alerts the BSA team via Microsoft Teams."
  tags:
    - compliance
    - aml
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: aml-screening
      port: 8080
      tools:
        - name: screen-transactions
          description: "Given a batch ID and screening date, run AML checks, create cases for flagged transactions, and alert compliance. Use for daily AML batch screening."
          inputParameters:
            - name: batch_id
              in: body
              type: string
              description: "The transaction batch ID."
            - name: screening_date
              in: body
              type: string
              description: "The screening date in YYYY-MM-DD format."
          steps:
            - name: run-screening
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "CALL COMPLIANCE.RUN_AML_SCREENING('{{batch_id}}', '{{screening_date}}')"
            - name: get-flagged
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT COUNT(*) as flagged_count FROM COMPLIANCE.AML_FLAGS WHERE batch_id = '{{batch_id}}'"
            - name: create-case
              type: call
              call: "servicenow.create-incident"
              with:
                category: "aml_compliance"
                short_description: "AML screening batch {{batch_id}}: {{get-flagged.flagged_count}} flagged transactions"
            - name: alert-bsa
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_bsa_channel"
                text: "AML screening batch {{batch_id}} on {{screening_date}}: {{get-flagged.flagged_count}} transactions flagged. Case: {{create-case.number}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Monitors Apache Kafka consumer group lag from Snowflake metrics, creates Jira tickets when lag exceeds thresholds, and alerts the streaming platform team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Apache Kafka Consumer Lag Monitor"
  description: "Monitors Apache Kafka consumer group lag from Snowflake metrics, creates Jira tickets when lag exceeds thresholds, and alerts the streaming platform team via Microsoft Teams."
  tags:
    - data-engineering
    - apache-kafka
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: apache_kafka_consume
      port: 8080
      tools:
        - name: apache-kafka
          description: "Given an execution date, run the apache kafka consumer lag monitor process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.APACHE_KAFKA_CONSUMER_LAG_MONITOR LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.APACHE_KAFKA_CONSUMER_LAG_MONITOR_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "WFOPS"
                issue_type: "Task"
                summary: "Apache Kafka Consumer Lag Monitor - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_apache_kafka_consume_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://wellsfargo.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Pulls Apigee API traffic and latency metrics, stores analytics in Snowflake, and distributes performance reports to the API team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Apigee API Gateway Performance Report"
  description: "Pulls Apigee API traffic and latency metrics, stores analytics in Snowflake, and distributes performance reports to the API team via Microsoft Teams."
  tags:
    - api-management
    - apigee
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: apigee_api_gateway_p
      port: 8080
      tools:
        - name: apigee-api
          description: "Given an execution date, run the apigee api gateway performance report process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.APIGEE_API_GATEWAY_PERFORMANCE_REPORT LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.APIGEE_API_GATEWAY_PERFORMANCE_REPORT_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_apigee_api_gateway_p_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Monitors ATM fleet health by pulling device telemetry from Snowflake, creating ServiceNow incidents for offline units, and alerting the channel operations team.

naftiko: "0.5"
info:
  label: "ATM Fleet Health Monitoring Chain"
  description: "Monitors ATM fleet health by pulling device telemetry from Snowflake, creating ServiceNow incidents for offline units, and alerting the channel operations team."
  tags:
    - operations
    - snowflake
    - servicenow
    - microsoft-teams
    - banking
capability:
  exposes:
    - type: mcp
      namespace: atm-ops
      port: 8080
      tools:
        - name: monitor-atm-fleet
          description: "Given a region code, query ATM health data from Snowflake, auto-create incidents for offline ATMs, and notify channel ops. Use for daily ATM fleet monitoring."
          inputParameters:
            - name: region_code
              in: body
              type: string
              description: "The geographic region code (e.g., WEST, EAST, CENTRAL)."
          steps:
            - name: get-offline-atms
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM OPS.ATM_HEALTH WHERE region='{{region_code}}' AND status='OFFLINE'"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "atm_outage"
                short_description: "ATM outage in {{region_code}}: {{get-offline-atms.count}} units offline"
            - name: notify-channel-ops
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_atm_channel"
                text: "ATM fleet alert for {{region_code}}: {{get-offline-atms.count}} ATMs offline. Incident: {{create-incident.number}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Analyzes ATM error logs in Snowflake, identifies machines needing maintenance, creates ServiceNow work orders, and notifies the ATM operations team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "ATM Fleet Maintenance Scheduler"
  description: "Analyzes ATM error logs in Snowflake, identifies machines needing maintenance, creates ServiceNow work orders, and notifies the ATM operations team via Microsoft Teams."
  tags:
    - operations
    - atm
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: atm_fleet_maintenanc
      port: 8080
      tools:
        - name: atm-fleet
          description: "Given an execution date, run the atm fleet maintenance scheduler process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.ATM_FLEET_MAINTENANCE_SCHEDULER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.ATM_FLEET_MAINTENANCE_SCHEDULER_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "operations"
                short_description: "ATM Fleet Maintenance Scheduler processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_atm_fleet_maintenanc_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Looks up a user in Azure Active Directory by UPN, returning profile, group memberships, and sign-in status.

naftiko: "0.5"
info:
  label: "Azure Active Directory User Lookup"
  description: "Looks up a user in Azure Active Directory by UPN, returning profile, group memberships, and sign-in status."
  tags:
    - identity
    - azure-active-directory
    - access-management
capability:
  exposes:
    - type: mcp
      namespace: identity
      port: 8080
      tools:
        - name: get-ad-user
          description: "Given an Azure AD user principal name, retrieve the user profile and group count. Use for identity verification."
          inputParameters:
            - name: user_upn
              in: body
              type: string
              description: "The user principal name, e.g. 'jdoe@wellsfargo.com'."
          call: "azure-ad.get-user"
          with:
            user_upn: "{{user_upn}}"
          outputParameters:
            - name: display_name
              type: string
              mapping: "$.displayName"
            - name: account_enabled
              type: boolean
              mapping: "$.accountEnabled"
  consumes:
    - type: http
      namespace: azure-ad
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users/{{user_upn}}"
          inputParameters:
            - name: user_upn
              in: path
          operations:
            - name: get-user
              method: GET

Retrieves an Azure AD user profile by UPN and returns display name, job title, and department.

naftiko: "0.5"
info:
  label: "Azure Active Directory User Profile Lookup"
  description: "Retrieves an Azure AD user profile by UPN and returns display name, job title, and department."
  tags:
    - identity
    - microsoft-azure
    - banking
capability:
  exposes:
    - type: mcp
      namespace: iam-directory
      port: 8080
      tools:
        - name: get-aad-user
          description: "Given an Azure AD user principal name, return the display name, job title, and department. Use for identity verification."
          inputParameters:
            - name: user_upn
              in: body
              type: string
              description: "The user principal name (e.g., jdoe@wellsfargo.com)."
          call: "aad.get-user"
          with:
            upn: "{{user_upn}}"
          outputParameters:
            - name: display_name
              type: string
              mapping: "$.displayName"
            - name: job_title
              type: string
              mapping: "$.jobTitle"
            - name: department
              type: string
              mapping: "$.department"
  consumes:
    - type: http
      namespace: aad
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users/{{upn}}"
          inputParameters:
            - name: upn
              in: path
          operations:
            - name: get-user
              method: GET

Detects Azure billing anomalies above a daily spend threshold and notifies the FinOps team via Microsoft Teams with a cost breakdown by subscription.

naftiko: "0.5"
info:
  label: "Azure Cloud Cost Anomaly Alert"
  description: "Detects Azure billing anomalies above a daily spend threshold and notifies the FinOps team via Microsoft Teams with a cost breakdown by subscription."
  tags:
    - cloud
    - finops
    - azure
    - microsoft-teams
    - cost-management
capability:
  exposes:
    - type: mcp
      namespace: cloud-cost-ops
      port: 8080
      tools:
        - name: alert-azure-cost-anomaly
          description: "Given an Azure subscription ID and spend threshold, retrieve daily cost data and post an anomaly alert to the FinOps Teams channel if the threshold is exceeded. Use for daily cloud spend governance."
          inputParameters:
            - name: subscription_id
              in: body
              type: string
              description: "Azure subscription ID to check (GUID format)."
            - name: threshold_usd
              in: body
              type: number
              description: "Daily spend threshold in USD above which to alert."
          steps:
            - name: get-usage-summary
              type: call
              call: azure-cost.get-usage-summary
              with:
                subscription_id: "{{subscription_id}}"
            - name: post-cost-alert
              type: call
              call: msteams-finops.send-message
              with:
                channel_id: "$secrets.teams_finops_channel_id"
                text: "Azure cost anomaly: Subscription {{subscription_id}} daily spend {{get-usage-summary.total_cost}} exceeds threshold ${{threshold_usd}}. Top service: {{get-usage-summary.top_service}}."
  consumes:
    - type: http
      namespace: azure-cost
      baseUri: "https://management.azure.com/subscriptions"
      authentication:
        type: bearer
        token: "$secrets.azure_mgmt_token"
      resources:
        - name: usage-summary
          path: "/{{subscription_id}}/providers/Microsoft.Consumption/usageDetails"
          inputParameters:
            - name: subscription_id
              in: path
          operations:
            - name: get-usage-summary
              method: GET
    - type: http
      namespace: msteams-finops
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Monitors Azure Data Factory pipeline runs, logs execution metrics in Snowflake, and alerts the data engineering team via Microsoft Teams when pipelines fail.

naftiko: "0.5"
info:
  label: "Azure Data Factory Pipeline Monitor"
  description: "Monitors Azure Data Factory pipeline runs, logs execution metrics in Snowflake, and alerts the data engineering team via Microsoft Teams when pipelines fail."
  tags:
    - data-engineering
    - azure-data-factory
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: azure_data_factory_p
      port: 8080
      tools:
        - name: azure-data
          description: "Given an execution date, run the azure data factory pipeline monitor process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.AZURE_DATA_FACTORY_PIPELINE_MONITOR LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.AZURE_DATA_FACTORY_PIPELINE_MONITOR_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_azure_data_factory_p_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Analyzes AKS cluster utilization metrics in Snowflake, generates scaling recommendations, creates Jira tasks, and notifies the platform team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Azure Kubernetes Cluster Scaling Advisor"
  description: "Analyzes AKS cluster utilization metrics in Snowflake, generates scaling recommendations, creates Jira tasks, and notifies the platform team via Microsoft Teams."
  tags:
    - infrastructure
    - azure-kubernetes-service
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: azure_kubernetes_clu
      port: 8080
      tools:
        - name: azure-kubernetes
          description: "Given an execution date, run the azure kubernetes cluster scaling advisor process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.AZURE_KUBERNETES_CLUSTER_SCALING_ADVISOR LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.AZURE_KUBERNETES_CLUSTER_SCALING_ADVISOR_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "WFOPS"
                issue_type: "Task"
                summary: "Azure Kubernetes Cluster Scaling Advisor - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_azure_kubernetes_clu_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://wellsfargo.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves the current month cost summary for an Azure resource group for FinOps reporting.

naftiko: "0.5"
info:
  label: "Azure Resource Group Cost Summary"
  description: "Retrieves the current month cost summary for an Azure resource group for FinOps reporting."
  tags:
    - finops
    - microsoft-azure
    - banking
capability:
  exposes:
    - type: mcp
      namespace: cloud-cost
      port: 8080
      tools:
        - name: get-cost-summary
          description: "Given an Azure subscription ID and resource group name, return the current month cost total and currency. Use for cloud FinOps reviews."
          inputParameters:
            - name: subscription_id
              in: body
              type: string
              description: "The Azure subscription ID."
            - name: resource_group
              in: body
              type: string
              description: "The Azure resource group name."
          call: "azure.get-cost"
          with:
            subscription_id: "{{subscription_id}}"
            resource_group: "{{resource_group}}"
          outputParameters:
            - name: total_cost
              type: string
              mapping: "$.properties.rows[0][0]"
            - name: currency
              type: string
              mapping: "$.properties.rows[0][1]"
  consumes:
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_mgmt_token"
      resources:
        - name: cost-management
          path: "/subscriptions/{{subscription_id}}/resourceGroups/{{resource_group}}/providers/Microsoft.CostManagement/query?api-version=2023-03-01"
          inputParameters:
            - name: subscription_id
              in: path
            - name: resource_group
              in: path
          operations:
            - name: get-cost
              method: POST

Checks the health status of a specified Azure resource, returning availability state.

naftiko: "0.5"
info:
  label: "Azure Resource Health Check"
  description: "Checks the health status of a specified Azure resource, returning availability state."
  tags:
    - cloud
    - microsoft-azure
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: cloud
      port: 8080
      tools:
        - name: get-resource-health
          description: "Given an Azure resource ID, retrieve its current availability status. Use for infrastructure monitoring."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "The full Azure resource ID path."
          call: "azure.get-resource-health"
          with:
            resource_id: "{{resource_id}}"
          outputParameters:
            - name: availability_state
              type: string
              mapping: "$.properties.availabilityState"
  consumes:
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_mgmt_token"
      resources:
        - name: resource-health
          path: "/{{resource_id}}/providers/Microsoft.ResourceHealth/availabilityStatuses/current"
          inputParameters:
            - name: resource_id
              in: path
          operations:
            - name: get-resource-health
              method: GET

Monitors Azure Service Bus dead-letter queues, logs failed messages in Snowflake, creates Jira investigation tickets, and alerts the integration team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Azure Service Bus Dead Letter Handler"
  description: "Monitors Azure Service Bus dead-letter queues, logs failed messages in Snowflake, creates Jira investigation tickets, and alerts the integration team via Microsoft Teams."
  tags:
    - integration
    - azure-service-bus
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: azure_service_bus_de
      port: 8080
      tools:
        - name: azure-service
          description: "Given an execution date, run the azure service bus dead letter handler process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.AZURE_SERVICE_BUS_DEAD_LETTER_HANDLER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.AZURE_SERVICE_BUS_DEAD_LETTER_HANDLER_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "WFOPS"
                issue_type: "Task"
                summary: "Azure Service Bus Dead Letter Handler - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_azure_service_bus_de_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://wellsfargo.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Triggers Azure Synapse data pipelines, monitors execution status, logs metrics in Snowflake, and alerts the data engineering team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Azure Synapse Data Pipeline Orchestrator"
  description: "Triggers Azure Synapse data pipelines, monitors execution status, logs metrics in Snowflake, and alerts the data engineering team via Microsoft Teams."
  tags:
    - data-engineering
    - azure-synapse-analytics
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: azure_synapse_data_p
      port: 8080
      tools:
        - name: azure-synapse
          description: "Given an execution date, run the azure synapse data pipeline orchestrator process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.AZURE_SYNAPSE_DATA_PIPELINE_ORCHESTRATOR LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.AZURE_SYNAPSE_DATA_PIPELINE_ORCHESTRATOR_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_azure_synapse_data_p_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Reconciles Bloomberg AIM trade records against Snowflake settlement data, flags breaks, and notifies the middle office via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Bloomberg AIM Trade Reconciliation"
  description: "Reconciles Bloomberg AIM trade records against Snowflake settlement data, flags breaks, and notifies the middle office via Microsoft Teams."
  tags:
    - trading
    - bloomberg
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: bloomberg_aim_trade_
      port: 8080
      tools:
        - name: bloomberg-aim
          description: "Given an execution date, run the bloomberg aim trade reconciliation process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.BLOOMBERG_AIM_TRADE_RECONCILIATION LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.BLOOMBERG_AIM_TRADE_RECONCILIATION_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_bloomberg_aim_trade__channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves the latest security price from Bloomberg for a given ticker, including bid, ask, and last trade.

naftiko: "0.5"
info:
  label: "Bloomberg Security Price Lookup"
  description: "Retrieves the latest security price from Bloomberg for a given ticker, including bid, ask, and last trade."
  tags:
    - trading
    - bloomberg
    - market-data
capability:
  exposes:
    - type: mcp
      namespace: market-data
      port: 8080
      tools:
        - name: get-security-price
          description: "Given a Bloomberg ticker, retrieve the latest price data. Use for real-time trading decisions."
          inputParameters:
            - name: ticker
              in: body
              type: string
              description: "The Bloomberg security ticker, e.g. 'AAPL US Equity'."
          call: "bloomberg.get-price"
          with:
            ticker: "{{ticker}}"
          outputParameters:
            - name: last_price
              type: string
              mapping: "$.data.last"
            - name: bid
              type: string
              mapping: "$.data.bid"
  consumes:
    - type: http
      namespace: bloomberg
      baseUri: "https://api.bloomberg.com/eap/catalogs/bbg/fields"
      authentication:
        type: bearer
        token: "$secrets.bloomberg_token"
      resources:
        - name: securities
          path: "/securities/{{ticker}}/snapshot"
          inputParameters:
            - name: ticker
              in: path
          operations:
            - name: get-price
              method: GET

Retrieves metadata for a Box file including name, size, and shared link status.

naftiko: "0.5"
info:
  label: "Box Document Metadata Lookup"
  description: "Retrieves metadata for a Box file including name, size, and shared link status."
  tags:
    - content-management
    - box
    - banking
capability:
  exposes:
    - type: mcp
      namespace: ecm-lookup
      port: 8080
      tools:
        - name: get-file-info
          description: "Given a Box file ID, return the file name, size in bytes, and shared link URL. Use for document management queries."
          inputParameters:
            - name: file_id
              in: body
              type: string
              description: "The Box file ID."
          call: "box.get-file"
          with:
            file_id: "{{file_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.name"
            - name: size
              type: integer
              mapping: "$.size"
            - name: shared_link
              type: string
              mapping: "$.shared_link.url"
  consumes:
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files/{{file_id}}"
          inputParameters:
            - name: file_id
              in: path
          operations:
            - name: get-file
              method: GET

Monitors network connectivity across branch locations via Snowflake metrics, creates ServiceNow incidents for outages, and notifies the NOC via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Branch Network Health Monitor"
  description: "Monitors network connectivity across branch locations via Snowflake metrics, creates ServiceNow incidents for outages, and notifies the NOC via Microsoft Teams."
  tags:
    - networking
    - infrastructure
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: branch_network_healt
      port: 8080
      tools:
        - name: branch-network
          description: "Given an execution date, run the branch network health monitor process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.BRANCH_NETWORK_HEALTH_MONITOR LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.BRANCH_NETWORK_HEALTH_MONITOR_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "networking"
                short_description: "Branch Network Health Monitor processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_branch_network_healt_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Synchronizes branch staffing forecasts by pulling headcount from Workday, comparing to traffic data in Snowflake, and sending staffing recommendations to branch managers.

naftiko: "0.5"
info:
  label: "Branch Staffing Forecast Sync"
  description: "Synchronizes branch staffing forecasts by pulling headcount from Workday, comparing to traffic data in Snowflake, and sending staffing recommendations to branch managers."
  tags:
    - hr
    - workday
    - snowflake
    - microsoft-teams
    - banking
capability:
  exposes:
    - type: mcp
      namespace: workforce-planning
      port: 8080
      tools:
        - name: sync-branch-staffing
          description: "Given a branch ID and forecast period, pull Workday headcount, compare to foot traffic data, and notify branch management with recommendations. Use for quarterly staffing reviews."
          inputParameters:
            - name: branch_id
              in: body
              type: string
              description: "The branch location ID."
            - name: forecast_period
              in: body
              type: string
              description: "The forecast period in YYYY-QN format."
          steps:
            - name: get-headcount
              type: call
              call: "workday.get-headcount"
              with:
                location_id: "{{branch_id}}"
            - name: get-traffic
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT avg_daily_traffic FROM OPS.BRANCH_TRAFFIC WHERE branch_id='{{branch_id}}' AND period='{{forecast_period}}'"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_branch_mgmt_channel"
                text: "Branch {{branch_id}} staffing: current headcount {{get-headcount.count}}, avg daily traffic {{get-traffic.avg_daily_traffic}} for {{forecast_period}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1/wellsfargo"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: headcount
          path: "/workers?location={{location_id}}"
          inputParameters:
            - name: location_id
              in: query
          operations:
            - name: get-headcount
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Monitors Calypso trade lifecycle events in Snowflake, flags stuck or aged trades, and alerts the trading operations team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Calypso Trade Lifecycle Monitor"
  description: "Monitors Calypso trade lifecycle events in Snowflake, flags stuck or aged trades, and alerts the trading operations team via Microsoft Teams."
  tags:
    - trading
    - calypso
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: calypso_trade_lifecy
      port: 8080
      tools:
        - name: calypso-trade
          description: "Given an execution date, run the calypso trade lifecycle monitor process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.CALYPSO_TRADE_LIFECYCLE_MONITOR LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.CALYPSO_TRADE_LIFECYCLE_MONITOR_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_calypso_trade_lifecy_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Processes Checkmarx SAST scan results, logs findings in Snowflake, creates Jira remediation tickets for critical vulnerabilities, and alerts the AppSec team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Checkmarx SAST Scan Result Handler"
  description: "Processes Checkmarx SAST scan results, logs findings in Snowflake, creates Jira remediation tickets for critical vulnerabilities, and alerts the AppSec team via Microsoft Teams."
  tags:
    - security
    - checkmarx
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: checkmarx_sast_scan_
      port: 8080
      tools:
        - name: checkmarx-sast
          description: "Given an execution date, run the checkmarx sast scan result handler process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.CHECKMARX_SAST_SCAN_RESULT_HANDLER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.CHECKMARX_SAST_SCAN_RESULT_HANDLER_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "WFOPS"
                issue_type: "Task"
                summary: "Checkmarx SAST Scan Result Handler - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_checkmarx_sast_scan__channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://wellsfargo.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When Cisco Firepower detects an intrusion, logs the alert in Splunk, creates a ServiceNow security incident, and alerts the SOC via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Cisco Firepower IDS Alert Handler"
  description: "When Cisco Firepower detects an intrusion, logs the alert in Splunk, creates a ServiceNow security incident, and alerts the SOC via Microsoft Teams."
  tags:
    - security
    - cisco
    - splunk
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: cisco_firepower_ids_
      port: 8080
      tools:
        - name: cisco-firepower
          description: "Given an execution date, run the cisco firepower ids alert handler process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.CISCO_FIREPOWER_IDS_ALERT_HANDLER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.CISCO_FIREPOWER_IDS_ALERT_HANDLER_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "security"
                short_description: "Cisco Firepower IDS Alert Handler processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_cisco_firepower_ids__channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: splunk
      baseUri: "https://wellsfargo-splunk.example.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: events
          path: "/receivers/simple"
          operations:
            - name: index-event
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Checks the current state of an AWS CloudWatch alarm and returns the state value and reason.

naftiko: "0.5"
info:
  label: "CloudWatch Alarm Check"
  description: "Checks the current state of an AWS CloudWatch alarm and returns the state value and reason."
  tags:
    - monitoring
    - amazon-web-services
    - cloudwatch
    - banking
capability:
  exposes:
    - type: mcp
      namespace: aws-monitoring
      port: 8080
      tools:
        - name: get-alarm-status
          description: "Given an AWS CloudWatch alarm name, retrieve its current state and state reason. Use for operational monitoring dashboards."
          inputParameters:
            - name: alarm_name
              in: body
              type: string
              description: "The CloudWatch alarm name."
          call: "cloudwatch.describe-alarm"
          with:
            alarm_name: "{{alarm_name}}"
          outputParameters:
            - name: state_value
              type: string
              mapping: "$.MetricAlarms[0].StateValue"
            - name: state_reason
              type: string
              mapping: "$.MetricAlarms[0].StateReason"
  consumes:
    - type: http
      namespace: cloudwatch
      baseUri: "https://monitoring.us-east-1.amazonaws.com"
      authentication:
        type: apikey
        key: "X-Amz-Security-Token"
        value: "$secrets.aws_session_token"
        placement: header
      resources:
        - name: alarms
          path: "/?Action=DescribeAlarms&AlarmNames.member.1={{alarm_name}}"
          inputParameters:
            - name: alarm_name
              in: query
          operations:
            - name: describe-alarm
              method: GET

Monitors loan covenants by pulling financial ratios from Snowflake, comparing against thresholds, creating Jira alerts for breaches, and notifying the credit risk team.

naftiko: "0.5"
info:
  label: "Commercial Loan Covenant Monitor"
  description: "Monitors loan covenants by pulling financial ratios from Snowflake, comparing against thresholds, creating Jira alerts for breaches, and notifying the credit risk team."
  tags:
    - lending
    - risk
    - snowflake
    - jira
    - microsoft-teams
    - banking
capability:
  exposes:
    - type: mcp
      namespace: credit-monitoring
      port: 8080
      tools:
        - name: check-covenants
          description: "Given a borrower ID and reporting date, pull financial ratios, check covenant thresholds, flag breaches, and notify credit risk. Use for quarterly covenant compliance checks."
          inputParameters:
            - name: borrower_id
              in: body
              type: string
              description: "The commercial borrower identifier."
            - name: reporting_date
              in: body
              type: string
              description: "The covenant reporting date in YYYY-MM-DD format."
          steps:
            - name: get-ratios
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM LENDING.COVENANT_RATIOS WHERE borrower_id='{{borrower_id}}' AND report_date='{{reporting_date}}'"
            - name: flag-breach
              type: call
              call: "jira.create-issue"
              with:
                project: "CRISK"
                issue_type: "Bug"
                summary: "Covenant breach: borrower {{borrower_id}} as of {{reporting_date}}"
            - name: notify-credit
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_credit_channel"
                text: "Covenant check for borrower {{borrower_id}} ({{reporting_date}}): {{get-ratios.breach_count}} breaches detected. Ticket: {{flag-breach.key}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://wellsfargo.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a Confluence page by ID and returns the title, body content, and last modified date.

naftiko: "0.5"
info:
  label: "Confluence Knowledge Base Lookup"
  description: "Retrieves a Confluence page by ID and returns the title, body content, and last modified date."
  tags:
    - documentation
    - confluence
    - banking
capability:
  exposes:
    - type: mcp
      namespace: wiki-lookup
      port: 8080
      tools:
        - name: get-page
          description: "Given a Confluence page ID, return the page title, content body, and last modified date. Use for knowledge base lookups."
          inputParameters:
            - name: page_id
              in: body
              type: string
              description: "The Confluence page ID."
          call: "confluence.get-page"
          with:
            page_id: "{{page_id}}"
          outputParameters:
            - name: title
              type: string
              mapping: "$.title"
            - name: body
              type: string
              mapping: "$.body.storage.value"
            - name: last_modified
              type: string
              mapping: "$.version.when"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://wellsfargo.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content/{{page_id}}?expand=body.storage,version"
          inputParameters:
            - name: page_id
              in: path
          operations:
            - name: get-page
              method: GET

Retrieves a Confluence wiki page by ID, returning title, space, and version number.

naftiko: "0.5"
info:
  label: "Confluence Page Lookup"
  description: "Retrieves a Confluence wiki page by ID, returning title, space, and version number."
  tags:
    - documentation
    - confluence
    - knowledge-management
capability:
  exposes:
    - type: mcp
      namespace: knowledge
      port: 8080
      tools:
        - name: get-page
          description: "Given a Confluence page ID, retrieve the page title and space key. Use for documentation reviews."
          inputParameters:
            - name: page_id
              in: body
              type: string
              description: "The Confluence page ID."
          call: "confluence.get-page"
          with:
            page_id: "{{page_id}}"
          outputParameters:
            - name: title
              type: string
              mapping: "$.title"
            - name: space_key
              type: string
              mapping: "$.space.key"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://wellsfargo.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content/{{page_id}}?expand=version,space"
          inputParameters:
            - name: page_id
              in: path
          operations:
            - name: get-page
              method: GET

When a consumer complaint is filed in Salesforce, categorizes it using Snowflake analytics, creates a ServiceNow case, and notifies the complaints team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Consumer Complaint Triage Workflow"
  description: "When a consumer complaint is filed in Salesforce, categorizes it using Snowflake analytics, creates a ServiceNow case, and notifies the complaints team via Microsoft Teams."
  tags:
    - compliance
    - consumer-complaints
    - salesforce
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: consumer_complaint_t
      port: 8080
      tools:
        - name: consumer-complaint
          description: "Given an execution date, run the consumer complaint triage workflow process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.CONSUMER_COMPLAINT_TRIAGE_WORKFLOW LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.CONSUMER_COMPLAINT_TRIAGE_WORKFLOW_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "compliance"
                short_description: "Consumer Complaint Triage Workflow processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_consumer_complaint_t_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Deploys a credit risk ML model by pulling the artifact from Azure ML, validating in Snowflake, registering in Databricks, and notifying the risk team.

naftiko: "0.5"
info:
  label: "Credit Risk ML Model Deployment Chain"
  description: "Deploys a credit risk ML model by pulling the artifact from Azure ML, validating in Snowflake, registering in Databricks, and notifying the risk team."
  tags:
    - risk
    - azure-machine-learning
    - snowflake
    - databricks
    - microsoft-teams
    - banking
capability:
  exposes:
    - type: mcp
      namespace: ml-ops
      port: 8080
      tools:
        - name: deploy-risk-model
          description: "Given a model name and version, fetch the artifact, validate, register, and notify. Use for model promotion to production."
          inputParameters:
            - name: model_name
              in: body
              type: string
              description: "The ML model name."
            - name: model_version
              in: body
              type: string
              description: "The model version to deploy."
          steps:
            - name: get-model
              type: call
              call: "azureml.get-model"
              with:
                model_name: "{{model_name}}"
                version: "{{model_version}}"
            - name: validate-model
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "CALL RISK.VALIDATE_MODEL('{{model_name}}', '{{model_version}}')"
            - name: register-model
              type: call
              call: "databricks.register-model"
              with:
                model_name: "{{model_name}}"
                version: "{{model_version}}"
            - name: notify-risk
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_risk_channel"
                text: "Model {{model_name}} v{{model_version}} deployed. Validation: {{validate-model.status}}."
  consumes:
    - type: http
      namespace: azureml
      baseUri: "https://ml.azure.com/api"
      authentication:
        type: bearer
        token: "$secrets.azureml_token"
      resources:
        - name: models
          path: "/models/{{model_name}}/versions/{{version}}"
          inputParameters:
            - name: model_name
              in: path
            - name: version
              in: path
          operations:
            - name: get-model
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: databricks
      baseUri: "https://wellsfargo.cloud.databricks.com/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: model-versions
          path: "/mlflow/model-versions/create"
          operations:
            - name: register-model
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Promotes a validated credit risk model from Databricks staging to production, logs the deployment in Snowflake, and notifies the risk analytics team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Credit Risk Model Deployment Pipeline"
  description: "Promotes a validated credit risk model from Databricks staging to production, logs the deployment in Snowflake, and notifies the risk analytics team via Microsoft Teams."
  tags:
    - risk
    - databricks
    - snowflake
    - microsoft-teams
    - mlops
capability:
  exposes:
    - type: mcp
      namespace: credit_risk_model_de
      port: 8080
      tools:
        - name: credit-risk
          description: "Given an execution date, run the credit risk model deployment pipeline process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.CREDIT_RISK_MODEL_DEPLOYMENT_PIPELINE LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.CREDIT_RISK_MODEL_DEPLOYMENT_PIPELINE_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_credit_risk_model_de_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When an account closure is requested in Salesforce, validates pending transactions in Snowflake, creates a ServiceNow task, and notifies branch operations via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Customer Account Closure Workflow"
  description: "When an account closure is requested in Salesforce, validates pending transactions in Snowflake, creates a ServiceNow task, and notifies branch operations via Microsoft Teams."
  tags:
    - banking
    - salesforce
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: customer_account_clo
      port: 8080
      tools:
        - name: customer-account
          description: "Given an execution date, run the customer account closure workflow process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.CUSTOMER_ACCOUNT_CLOSURE_WORKFLOW LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.CUSTOMER_ACCOUNT_CLOSURE_WORKFLOW_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "banking"
                short_description: "Customer Account Closure Workflow processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_customer_account_clo_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Scans vulnerability data in Snowflake, creates Jira remediation tickets for critical findings, and alerts the security team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Cybersecurity Vulnerability Remediation Tracker"
  description: "Scans vulnerability data in Snowflake, creates Jira remediation tickets for critical findings, and alerts the security team via Microsoft Teams."
  tags:
    - security
    - vulnerability
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: cybersecurity_vulner
      port: 8080
      tools:
        - name: cybersecurity-vulnerability
          description: "Given an execution date, run the cybersecurity vulnerability remediation tracker process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.CYBERSECURITY_VULNERABILITY_REMEDIATION_TRACKER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.CYBERSECURITY_VULNERABILITY_REMEDIATION_TRACKER_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "WFOPS"
                issue_type: "Task"
                summary: "Cybersecurity Vulnerability Remediation Tracker - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_cybersecurity_vulner_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://wellsfargo.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Checks the current status of a Datadog monitor and returns the overall state and last triggered time.

naftiko: "0.5"
info:
  label: "Datadog Monitor Status Check"
  description: "Checks the current status of a Datadog monitor and returns the overall state and last triggered time."
  tags:
    - monitoring
    - datadog
    - banking
capability:
  exposes:
    - type: mcp
      namespace: observability
      port: 8080
      tools:
        - name: get-monitor-status
          description: "Given a Datadog monitor ID, return the current overall status and last triggered timestamp. Use for operational health checks."
          inputParameters:
            - name: monitor_id
              in: body
              type: string
              description: "The Datadog monitor ID."
          call: "datadog.get-monitor"
          with:
            monitor_id: "{{monitor_id}}"
          outputParameters:
            - name: overall_state
              type: string
              mapping: "$.overall_state"
            - name: last_triggered
              type: string
              mapping: "$.overall_state_modified"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: monitors
          path: "/monitor/{{monitor_id}}"
          inputParameters:
            - name: monitor_id
              in: path
          operations:
            - name: get-monitor
              method: GET

Queries Datadog for the current health status of a specified service, returning uptime and alert count.

naftiko: "0.5"
info:
  label: "Datadog Service Health Check"
  description: "Queries Datadog for the current health status of a specified service, returning uptime and alert count."
  tags:
    - monitoring
    - datadog
    - observability
capability:
  exposes:
    - type: mcp
      namespace: monitoring
      port: 8080
      tools:
        - name: get-service-health
          description: "Given a Datadog service name, retrieve its health status and uptime. Use for operational readiness checks."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The Datadog service name."
          call: "datadog.get-service-health"
          with:
            service_name: "{{service_name}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.data.attributes.status"
  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: services
          path: "/service_level_objectives?query={{service_name}}"
          inputParameters:
            - name: service_name
              in: query
          operations:
            - name: get-service-health
              method: GET

Syncs Dealogic investment banking deal pipeline data to Snowflake, compares against targets, and notifies the deal team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Dealogic Deal Pipeline Sync"
  description: "Syncs Dealogic investment banking deal pipeline data to Snowflake, compares against targets, and notifies the deal team via Microsoft Teams."
  tags:
    - investment-banking
    - dealogic
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: dealogic_deal_pipeli
      port: 8080
      tools:
        - name: dealogic-deal
          description: "Given an execution date, run the dealogic deal pipeline sync process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.DEALOGIC_DEAL_PIPELINE_SYNC LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.DEALOGIC_DEAL_PIPELINE_SYNC_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_dealogic_deal_pipeli_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When deposit rates change, updates the rate table in Snowflake, refreshes the Power BI dashboard, and notifies branch managers and treasury via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Deposit Rate Change Propagation"
  description: "When deposit rates change, updates the rate table in Snowflake, refreshes the Power BI dashboard, and notifies branch managers and treasury via Microsoft Teams."
  tags:
    - treasury
    - snowflake
    - power-bi
    - microsoft-teams
    - banking
capability:
  exposes:
    - type: mcp
      namespace: rates-ops
      port: 8080
      tools:
        - name: propagate-rate-change
          description: "Given a product type and new rate, update the rate table, refresh dashboards, and notify stakeholders. Use when the ALCO committee approves rate changes."
          inputParameters:
            - name: product_type
              in: body
              type: string
              description: "The deposit product type (e.g., SAVINGS, CD_12M, MMDA)."
            - name: new_rate
              in: body
              type: string
              description: "The new interest rate as a decimal (e.g., 0.0425)."
          steps:
            - name: update-rate
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "UPDATE TREASURY.DEPOSIT_RATES SET rate={{new_rate}}, effective_date=CURRENT_DATE WHERE product='{{product_type}}'"
            - name: refresh-dashboard
              type: call
              call: "powerbi.trigger-refresh"
              with:
                dataset_id: "$secrets.rates_dataset_id"
            - name: notify-treasury
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_treasury_channel"
                text: "Deposit rate update: {{product_type}} now {{new_rate}}. Dashboard refreshed."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: refreshes
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Validates a digital banking release by checking the GitHub Actions pipeline, running smoke tests via Datadog, and posting results to Microsoft Teams.

naftiko: "0.5"
info:
  label: "Digital Banking Release Validation"
  description: "Validates a digital banking release by checking the GitHub Actions pipeline, running smoke tests via Datadog, and posting results to Microsoft Teams."
  tags:
    - devops
    - github-actions
    - datadog
    - microsoft-teams
    - banking
capability:
  exposes:
    - type: mcp
      namespace: release-ops
      port: 8080
      tools:
        - name: validate-release
          description: "Given a GitHub repository and release tag, verify CI pipeline passed, trigger synthetic tests, and notify the release team. Use after each digital banking deployment."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "The GitHub repository name."
            - name: release_tag
              in: body
              type: string
              description: "The release tag (e.g., v2.5.1)."
          steps:
            - name: check-pipeline
              type: call
              call: "github.get-workflow-run"
              with:
                repo: "{{repo_name}}"
                tag: "{{release_tag}}"
            - name: run-synthetics
              type: call
              call: "datadog.trigger-synthetics"
              with:
                test_ids: "$secrets.digital_banking_test_ids"
            - name: notify-release
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_release_channel"
                text: "Release {{release_tag}} for {{repo_name}}: CI {{check-pipeline.conclusion}}, synthetics {{run-synthetics.status}}."
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflow-runs
          path: "/repos/wellsfargo/{{repo}}/actions/runs?branch={{tag}}"
          inputParameters:
            - name: repo
              in: path
            - name: tag
              in: query
          operations:
            - name: get-workflow-run
              method: GET
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: synthetics
          path: "/synthetics/tests/trigger"
          operations:
            - name: trigger-synthetics
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Assigns incoming leads in Microsoft Dynamics 365 based on territory rules in Snowflake, creates Jira tasks for follow-up, and notifies assigned reps via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Dynamics 365 CRM Lead Assignment"
  description: "Assigns incoming leads in Microsoft Dynamics 365 based on territory rules in Snowflake, creates Jira tasks for follow-up, and notifies assigned reps via Microsoft Teams."
  tags:
    - sales
    - microsoft-dynamics-365
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: dynamic_365_crm_lead
      port: 8080
      tools:
        - name: dynamic-365
          description: "Given an execution date, run the dynamics 365 crm lead assignment process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.DYNAMIC_365_CRM_LEAD_ASSIGNMENT LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.DYNAMIC_365_CRM_LEAD_ASSIGNMENT_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "WFOPS"
                issue_type: "Task"
                summary: "Dynamics 365 CRM Lead Assignment - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_dynamic_365_crm_lead_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://wellsfargo.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When an employee separation is processed in Workday, creates a ServiceNow offboarding task for access revocation and notifies HR Operations via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Employee Separation and Access Revocation"
  description: "When an employee separation is processed in Workday, creates a ServiceNow offboarding task for access revocation and notifies HR Operations via Microsoft Teams."
  tags:
    - hr
    - offboarding
    - workday
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-offboarding
      port: 8080
      tools:
        - name: trigger-employee-offboarding
          description: "Given a Workday employee ID and separation date, create a ServiceNow access revocation task and notify HR Operations in Microsoft Teams. Invoke on any voluntary or involuntary separation at Wells Fargo."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "Workday worker ID of the departing employee."
            - name: separation_date
              in: body
              type: string
              description: "Last working day in ISO 8601 format (YYYY-MM-DD)."
            - name: separation_type
              in: body
              type: string
              description: "Separation type: voluntary, involuntary, retirement, transfer."
          steps:
            - name: get-worker
              type: call
              call: workday-off.get-worker
              with:
                worker_id: "{{workday_employee_id}}"
            - name: create-offboarding-task
              type: call
              call: servicenow-off.create-task
              with:
                category: hr_offboarding
                short_description: "Offboarding: {{get-worker.full_name}} — {{separation_date}}"
                assigned_group: IT_Access_Management
                description: "Employee {{workday_employee_id}} separating on {{separation_date}} ({{separation_type}}). All system access must be revoked."
            - name: notify-hr-ops
              type: call
              call: msteams-hrops.send-message
              with:
                channel_id: "$secrets.teams_hrops_channel_id"
                text: "Offboarding initiated: {{get-worker.full_name}} ({{workday_employee_id}}). Separation: {{separation_date}} ({{separation_type}}). ServiceNow task: {{create-offboarding-task.number}}."
  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: workers
          path: "/wellsfargo/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow-off
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams-hrops
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves company fundamental data from FactSet including market cap, P/E ratio, and revenue.

naftiko: "0.5"
info:
  label: "FactSet Company Fundamentals Lookup"
  description: "Retrieves company fundamental data from FactSet including market cap, P/E ratio, and revenue."
  tags:
    - research
    - factset
    - financial-data
capability:
  exposes:
    - type: mcp
      namespace: research
      port: 8080
      tools:
        - name: get-fundamentals
          description: "Given a FactSet entity ID, retrieve company fundamentals. Use for investment research and due diligence."
          inputParameters:
            - name: entity_id
              in: body
              type: string
              description: "The FactSet entity ID."
          call: "factset.get-fundamentals"
          with:
            entity_id: "{{entity_id}}"
          outputParameters:
            - name: market_cap
              type: string
              mapping: "$.data.marketCap"
            - name: pe_ratio
              type: string
              mapping: "$.data.peRatio"
  consumes:
    - type: http
      namespace: factset
      baseUri: "https://api.factset.com/content/factset-fundamentals/v2"
      authentication:
        type: basic
        username: "$secrets.factset_user"
        password: "$secrets.factset_password"
      resources:
        - name: companies
          path: "/fundamentals?ids={{entity_id}}"
          inputParameters:
            - name: entity_id
              in: query
          operations:
            - name: get-fundamentals
              method: GET

When a Figma design is marked as ready, creates Jira development tickets with design links, and notifies the engineering team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Figma Design Handoff Workflow"
  description: "When a Figma design is marked as ready, creates Jira development tickets with design links, and notifies the engineering team via Microsoft Teams."
  tags:
    - design
    - figma
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: figma_design_handoff
      port: 8080
      tools:
        - name: figma-design
          description: "Given an execution date, run the figma design handoff workflow process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.FIGMA_DESIGN_HANDOFF_WORKFLOW LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.FIGMA_DESIGN_HANDOFF_WORKFLOW_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "WFOPS"
                issue_type: "Task"
                summary: "Figma Design Handoff Workflow - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_figma_design_handoff_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://wellsfargo.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a fraud alert is raised, pulls the transaction details from Snowflake, creates a Jira investigation ticket, and sends an urgent notification to the fraud operations team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Fraud Alert Investigation Chain"
  description: "When a fraud alert is raised, pulls the transaction details from Snowflake, creates a Jira investigation ticket, and sends an urgent notification to the fraud operations team via Microsoft Teams."
  tags:
    - fraud
    - snowflake
    - jira
    - microsoft-teams
    - banking
capability:
  exposes:
    - type: mcp
      namespace: fraud-ops
      port: 8080
      tools:
        - name: investigate-fraud-alert
          description: "Given a transaction ID and alert severity, pull transaction details, open a Jira investigation ticket, and notify fraud ops. Use when real-time fraud alerts are triggered."
          inputParameters:
            - name: transaction_id
              in: body
              type: string
              description: "The transaction ID flagged for fraud."
            - name: alert_severity
              in: body
              type: string
              description: "Alert severity level (HIGH, MEDIUM, LOW)."
          steps:
            - name: get-transaction
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM FRAUD.TRANSACTIONS WHERE txn_id='{{transaction_id}}'"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "FRAUD"
                issue_type: "Bug"
                summary: "Fraud alert [{{alert_severity}}]: txn {{transaction_id}}"
            - name: notify-fraud-ops
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_fraud_channel"
                text: "Fraud alert for txn {{transaction_id}} ({{alert_severity}}). Investigation ticket: {{create-ticket.key}}. Amount: {{get-transaction.amount}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://wellsfargo.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Analyzes fraud scoring results in Snowflake, creates ServiceNow cases for high-risk transactions, and alerts the fraud operations team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Fraud Detection Alert Pipeline"
  description: "Analyzes fraud scoring results in Snowflake, creates ServiceNow cases for high-risk transactions, and alerts the fraud operations team via Microsoft Teams."
  tags:
    - banking
    - fraud
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: fraud_detection_aler
      port: 8080
      tools:
        - name: fraud-detection
          description: "Given an execution date, run the fraud detection alert pipeline process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.FRAUD_DETECTION_ALERT_PIPELINE LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.FRAUD_DETECTION_ALERT_PIPELINE_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "banking"
                short_description: "Fraud Detection Alert Pipeline processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_fraud_detection_aler_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a GitHub Actions workflow fails on a protected branch, creates a Jira bug in the engineering project and posts an alert to the platform engineering Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "GitHub CI/CD Pipeline Failure to Jira"
  description: "When a GitHub Actions workflow fails on a protected branch, creates a Jira bug in the engineering project and posts an alert to the platform engineering Microsoft Teams channel."
  tags:
    - devops
    - cicd
    - github
    - jira
    - microsoft-teams
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: cicd-ops
      port: 8080
      tools:
        - name: handle-pipeline-failure
          description: "Given a failed GitHub Actions run, create a Jira bug and alert the platform engineering Teams channel. Invoke on protected-branch pipeline failures for critical banking application repositories."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "GitHub repository in owner/repo format (e.g. wells-fargo/core-banking-api)."
            - name: workflow_run_id
              in: body
              type: string
              description: "GitHub Actions workflow run ID that failed."
            - name: branch
              in: body
              type: string
              description: "Branch name where the failure occurred."
            - name: commit_sha
              in: body
              type: string
              description: "Commit SHA of the failed run."
          steps:
            - name: get-run-details
              type: call
              call: github.get-workflow-run
              with:
                repo: "{{repo}}"
                run_id: "{{workflow_run_id}}"
            - name: create-jira-bug
              type: call
              call: jira.create-issue
              with:
                project_key: PLAT
                issuetype: Bug
                summary: "[CI Failure] {{repo}} / {{branch}} — {{get-run-details.name}}"
                description: "Workflow: {{get-run-details.name}}\nBranch: {{branch}}\nCommit: {{commit_sha}}\nURL: {{get-run-details.html_url}}"
            - name: alert-platform-eng
              type: call
              call: msteams-platform.send-message
              with:
                channel_id: "$secrets.teams_platform_channel_id"
                text: "CI/CD failure: {{repo}} | Branch: {{branch}} | Jira: {{create-jira-bug.key}} | Run: {{get-run-details.html_url}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflow-runs
          path: "/repos/{{repo}}/actions/runs/{{run_id}}"
          inputParameters:
            - name: repo
              in: path
            - name: run_id
              in: path
          operations:
            - name: get-workflow-run
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://wellsfargo.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams-platform
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Collects GitHub Copilot usage metrics, stores analytics in Snowflake, and distributes adoption reports to engineering leadership via Microsoft Teams.

naftiko: "0.5"
info:
  label: "GitHub Copilot Usage Analytics Reporter"
  description: "Collects GitHub Copilot usage metrics, stores analytics in Snowflake, and distributes adoption reports to engineering leadership via Microsoft Teams."
  tags:
    - devops
    - github-copilot
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: github_copilot_usage
      port: 8080
      tools:
        - name: github-copilot
          description: "Given an execution date, run the github copilot usage analytics reporter process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.GITHUB_COPILOT_USAGE_ANALYTICS_REPORTER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.GITHUB_COPILOT_USAGE_ANALYTICS_REPORTER_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_github_copilot_usage_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Processes GitHub Dependabot vulnerability alerts, logs them in Snowflake, creates Jira remediation tickets, and notifies the security engineering team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "GitHub Dependabot Vulnerability Triage"
  description: "Processes GitHub Dependabot vulnerability alerts, logs them in Snowflake, creates Jira remediation tickets, and notifies the security engineering team via Microsoft Teams."
  tags:
    - security
    - github
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: github_dependabot_vu
      port: 8080
      tools:
        - name: github-dependabot
          description: "Given an execution date, run the github dependabot vulnerability triage process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.GITHUB_DEPENDABOT_VULNERABILITY_TRIAGE LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.GITHUB_DEPENDABOT_VULNERABILITY_TRIAGE_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "WFOPS"
                issue_type: "Task"
                summary: "GitHub Dependabot Vulnerability Triage - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_github_dependabot_vu_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://wellsfargo.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves metadata for a GitHub repository including description, default branch, and open issue count.

naftiko: "0.5"
info:
  label: "GitHub Repository Info Lookup"
  description: "Retrieves metadata for a GitHub repository including description, default branch, and open issue count."
  tags:
    - devops
    - github
    - banking
capability:
  exposes:
    - type: mcp
      namespace: scm-lookup
      port: 8080
      tools:
        - name: get-repo-info
          description: "Given a GitHub org and repo name, return the description, default branch, and open issues count. Use for developer portal lookups."
          inputParameters:
            - name: org
              in: body
              type: string
              description: "The GitHub organization name."
            - name: repo
              in: body
              type: string
              description: "The GitHub repository name."
          call: "github.get-repo"
          with:
            org: "{{org}}"
            repo: "{{repo}}"
          outputParameters:
            - name: description
              type: string
              mapping: "$.description"
            - name: default_branch
              type: string
              mapping: "$.default_branch"
            - name: open_issues
              type: integer
              mapping: "$.open_issues_count"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: repos
          path: "/repos/{{org}}/{{repo}}"
          inputParameters:
            - name: org
              in: path
            - name: repo
              in: path
          operations:
            - name: get-repo
              method: GET

Retrieves metadata for a GitHub repository including default branch, open issues, and visibility.

naftiko: "0.5"
info:
  label: "GitHub Repository Info Lookup"
  description: "Retrieves metadata for a GitHub repository including default branch, open issues, and visibility."
  tags:
    - devops
    - github
    - source-control
capability:
  exposes:
    - type: mcp
      namespace: devops
      port: 8080
      tools:
        - name: get-repo-info
          description: "Given a GitHub org and repo name, retrieve repository metadata. Use for developer onboarding."
          inputParameters:
            - name: org
              in: body
              type: string
              description: "The GitHub organization."
            - name: repo
              in: body
              type: string
              description: "The repository name."
          call: "github.get-repo"
          with:
            org: "{{org}}"
            repo: "{{repo}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.full_name"
            - name: default_branch
              type: string
              mapping: "$.default_branch"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: repos
          path: "/repos/{{org}}/{{repo}}"
          inputParameters:
            - name: org
              in: path
            - name: repo
              in: path
          operations:
            - name: get-repo
              method: GET

Scans GitHub repositories for open Dependabot and code scanning alerts, aggregates findings by severity, and posts a weekly digest to the AppSec Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "GitHub Repository Security Advisory Scan"
  description: "Scans GitHub repositories for open Dependabot and code scanning alerts, aggregates findings by severity, and posts a weekly digest to the AppSec Microsoft Teams channel."
  tags:
    - devops
    - security
    - github
    - microsoft-teams
    - devsecops
    - appsec
capability:
  exposes:
    - type: mcp
      namespace: appsec-scanning
      port: 8080
      tools:
        - name: digest-repo-security-alerts
          description: "Given a GitHub organization and severity filter, retrieve open Dependabot and code scanning alerts and post a digest to the AppSec Teams channel. Use for weekly security hygiene reviews on banking application repositories."
          inputParameters:
            - name: github_org
              in: body
              type: string
              description: "GitHub organization to scan (e.g. wells-fargo)."
            - name: severity_filter
              in: body
              type: string
              description: "Minimum severity to include: critical, high, medium."
          steps:
            - name: get-dependabot-alerts
              type: call
              call: github-sec.list-org-alerts
              with:
                org: "{{github_org}}"
                severity: "{{severity_filter}}"
            - name: post-security-digest
              type: call
              call: msteams-appsec.send-message
              with:
                channel_id: "$secrets.teams_appsec_channel_id"
                text: "Weekly security scan for {{github_org}}: {{get-dependabot-alerts.total_count}} open alerts (Critical: {{get-dependabot-alerts.critical_count}}, High: {{get-dependabot-alerts.high_count}}). Review in GitHub Security."
  consumes:
    - type: http
      namespace: github-sec
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: org-alerts
          path: "/orgs/{{org}}/dependabot/alerts"
          inputParameters:
            - name: org
              in: path
            - name: severity
              in: query
          operations:
            - name: list-org-alerts
              method: GET
    - type: http
      namespace: msteams-appsec
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a Grafana dashboard by UID and returns the title, panel count, and last updated timestamp.

naftiko: "0.5"
info:
  label: "Grafana Dashboard Info Lookup"
  description: "Retrieves a Grafana dashboard by UID and returns the title, panel count, and last updated timestamp."
  tags:
    - monitoring
    - grafana
    - banking
capability:
  exposes:
    - type: mcp
      namespace: observability-dash
      port: 8080
      tools:
        - name: get-dashboard
          description: "Given a Grafana dashboard UID, return the dashboard title, number of panels, and last updated time. Use for observability catalog queries."
          inputParameters:
            - name: dashboard_uid
              in: body
              type: string
              description: "The Grafana dashboard UID."
          call: "grafana.get-dashboard"
          with:
            uid: "{{dashboard_uid}}"
          outputParameters:
            - name: title
              type: string
              mapping: "$.dashboard.title"
            - name: panel_count
              type: integer
              mapping: "$.dashboard.panels.length"
            - name: updated
              type: string
              mapping: "$.meta.updated"
  consumes:
    - type: http
      namespace: grafana
      baseUri: "https://grafana.wellsfargo.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_token"
      resources:
        - name: dashboards
          path: "/dashboards/uid/{{uid}}"
          inputParameters:
            - name: uid
              in: path
          operations:
            - name: get-dashboard
              method: GET

Monitors IBM MQ queue depths from Snowflake metrics, flags queues approaching capacity, creates Jira tasks, and alerts the middleware team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "IBM MQ Queue Depth Monitor"
  description: "Monitors IBM MQ queue depths from Snowflake metrics, flags queues approaching capacity, creates Jira tasks, and alerts the middleware team via Microsoft Teams."
  tags:
    - integration
    - ibm-mq
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: ibm_mq_queue_depth_m
      port: 8080
      tools:
        - name: ibm-mq
          description: "Given an execution date, run the ibm mq queue depth monitor process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.IBM_MQ_QUEUE_DEPTH_MONITOR LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.IBM_MQ_QUEUE_DEPTH_MONITOR_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "WFOPS"
                issue_type: "Task"
                summary: "IBM MQ Queue Depth Monitor - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_ibm_mq_queue_depth_m_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://wellsfargo.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Analyzes Istio service mesh traffic patterns from Snowflake metrics, identifies anomalies, creates Jira investigation tickets, and alerts the platform team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Istio Service Mesh Traffic Analyzer"
  description: "Analyzes Istio service mesh traffic patterns from Snowflake metrics, identifies anomalies, creates Jira investigation tickets, and alerts the platform team via Microsoft Teams."
  tags:
    - infrastructure
    - istio
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: istio_service_mesh_t
      port: 8080
      tools:
        - name: istio-service
          description: "Given an execution date, run the istio service mesh traffic analyzer process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.ISTIO_SERVICE_MESH_TRAFFIC_ANALYZER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.ISTIO_SERVICE_MESH_TRAFFIC_ANALYZER_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "WFOPS"
                issue_type: "Task"
                summary: "Istio Service Mesh Traffic Analyzer - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_istio_service_mesh_t_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://wellsfargo.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Manages IT change requests by creating a ServiceNow change record, running pre-change health checks in Datadog, and notifying the CAB via Microsoft Teams.

naftiko: "0.5"
info:
  label: "IT Change Management Chain"
  description: "Manages IT change requests by creating a ServiceNow change record, running pre-change health checks in Datadog, and notifying the CAB via Microsoft Teams."
  tags:
    - itsm
    - servicenow
    - datadog
    - microsoft-teams
    - banking
capability:
  exposes:
    - type: mcp
      namespace: change-mgmt
      port: 8080
      tools:
        - name: process-change-request
          description: "Given a change description, risk level, and implementation window, create the ServiceNow record, validate system health, and notify the CAB. Use for production change management."
          inputParameters:
            - name: change_description
              in: body
              type: string
              description: "Description of the proposed change."
            - name: risk_level
              in: body
              type: string
              description: "Risk level: Low, Medium, High, Emergency."
          steps:
            - name: create-change
              type: call
              call: "servicenow.create-change"
              with:
                description: "{{change_description}}"
                risk: "{{risk_level}}"
            - name: health-check
              type: call
              call: "datadog.get-monitor"
              with:
                monitor_id: "$secrets.prod_health_monitor_id"
            - name: notify-cab
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_cab_channel"
                text: "Change request {{create-change.number}}: {{change_description}}. Risk: {{risk_level}}. System health: {{health-check.overall_state}}."
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: monitors
          path: "/monitor/{{monitor_id}}"
          inputParameters:
            - name: monitor_id
              in: path
          operations:
            - name: get-monitor
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Identifies unused artifacts in JFrog Artifactory, logs cleanup candidates in Snowflake, creates Jira cleanup tasks, and notifies the DevOps team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "JFrog Artifactory Artifact Cleanup"
  description: "Identifies unused artifacts in JFrog Artifactory, logs cleanup candidates in Snowflake, creates Jira cleanup tasks, and notifies the DevOps team via Microsoft Teams."
  tags:
    - devops
    - jfrog-artifactory
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: jfrog_artifactory_ar
      port: 8080
      tools:
        - name: jfrog-artifactory
          description: "Given an execution date, run the jfrog artifactory artifact cleanup process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.JFROG_ARTIFACTORY_ARTIFACT_CLEANUP LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.JFROG_ARTIFACTORY_ARTIFACT_CLEANUP_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "WFOPS"
                issue_type: "Task"
                summary: "JFrog Artifactory Artifact Cleanup - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_jfrog_artifactory_ar_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://wellsfargo.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a Jira issue by key, returning summary, status, assignee, and priority.

naftiko: "0.5"
info:
  label: "Jira Issue Lookup"
  description: "Retrieves a Jira issue by key, returning summary, status, assignee, and priority."
  tags:
    - project-management
    - jira
    - issue-tracking
capability:
  exposes:
    - type: mcp
      namespace: project-management
      port: 8080
      tools:
        - name: get-issue
          description: "Given a Jira issue key, retrieve the issue details. Use for status updates and triage."
          inputParameters:
            - name: issue_key
              in: body
              type: string
              description: "The Jira issue key."
          call: "jira.get-issue"
          with:
            issue_key: "{{issue_key}}"
          outputParameters:
            - name: summary
              type: string
              mapping: "$.fields.summary"
            - name: status
              type: string
              mapping: "$.fields.status.name"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://wellsfargo.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue/{{issue_key}}"
          inputParameters:
            - name: issue_key
              in: path
          operations:
            - name: get-issue
              method: GET

Retrieves completed sprint data from Jira, calculates story point velocity, and publishes the report to the technology leadership Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Jira Sprint Board Velocity Report"
  description: "Retrieves completed sprint data from Jira, calculates story point velocity, and publishes the report to the technology leadership Microsoft Teams channel."
  tags:
    - devops
    - jira
    - microsoft-teams
    - reporting
    - agile
capability:
  exposes:
    - type: mcp
      namespace: agile-metrics
      port: 8080
      tools:
        - name: publish-sprint-velocity-report
          description: "Given a Jira board ID and sprint ID, retrieve completed issues and story points, and post the velocity summary to the technology leadership Teams channel. Use after each sprint close."
          inputParameters:
            - name: board_id
              in: body
              type: string
              description: "Jira board ID (numeric string)."
            - name: sprint_id
              in: body
              type: string
              description: "Jira sprint ID for the completed sprint."
          steps:
            - name: get-sprint-details
              type: call
              call: jira.get-sprint
              with:
                sprint_id: "{{sprint_id}}"
            - name: get-completed-issues
              type: call
              call: jira.search-issues
              with:
                jql: "sprint = {{sprint_id}} AND status = Done"
            - name: post-velocity-report
              type: call
              call: msteams-tech.send-message
              with:
                channel_id: "$secrets.teams_tech_channel_id"
                text: "Sprint {{get-sprint-details.name}} velocity: {{get-completed-issues.total}} issues completed. Goal: {{get-sprint-details.goal}}. Board: {{board_id}}."
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://wellsfargo.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: sprints
          path: "/sprint/{{sprint_id}}"
          inputParameters:
            - name: sprint_id
              in: path
          operations:
            - name: get-sprint
              method: GET
        - name: issues
          path: "/search"
          inputParameters:
            - name: jql
              in: query
          operations:
            - name: search-issues
              method: GET
    - type: http
      namespace: msteams-tech
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a Jira issue by key and returns summary, status, assignee, and priority.

naftiko: "0.5"
info:
  label: "Jira Ticket Lookup"
  description: "Retrieves a Jira issue by key and returns summary, status, assignee, and priority."
  tags:
    - project-management
    - jira
    - banking
capability:
  exposes:
    - type: mcp
      namespace: pm-lookup
      port: 8080
      tools:
        - name: get-issue
          description: "Given a Jira issue key, return the issue summary, status, assignee, and priority. Use for project tracking and status inquiries."
          inputParameters:
            - name: issue_key
              in: body
              type: string
              description: "The Jira issue key (e.g., PROJ-123)."
          call: "jira.get-issue"
          with:
            issue_key: "{{issue_key}}"
          outputParameters:
            - name: summary
              type: string
              mapping: "$.fields.summary"
            - name: status
              type: string
              mapping: "$.fields.status.name"
            - name: assignee
              type: string
              mapping: "$.fields.assignee.displayName"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://wellsfargo.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue/{{issue_key}}"
          inputParameters:
            - name: issue_key
              in: path
          operations:
            - name: get-issue
              method: GET

Audits Keycloak SSO sessions for anomalous patterns, logs findings in Snowflake, creates ServiceNow security incidents, and alerts the IAM team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Keycloak SSO Session Audit"
  description: "Audits Keycloak SSO sessions for anomalous patterns, logs findings in Snowflake, creates ServiceNow security incidents, and alerts the IAM team via Microsoft Teams."
  tags:
    - security
    - keycloak
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: keycloak_sso_session
      port: 8080
      tools:
        - name: keycloak-sso
          description: "Given an execution date, run the keycloak sso session audit process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.KEYCLOAK_SSO_SESSION_AUDIT LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.KEYCLOAK_SSO_SESSION_AUDIT_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "security"
                short_description: "Keycloak SSO Session Audit processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_keycloak_sso_session_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Orchestrates Know Your Customer onboarding by creating a Salesforce case, running identity checks via Snowflake, provisioning access in Okta, and notifying the compliance team.

naftiko: "0.5"
info:
  label: "KYC Customer Onboarding Workflow"
  description: "Orchestrates Know Your Customer onboarding by creating a Salesforce case, running identity checks via Snowflake, provisioning access in Okta, and notifying the compliance team."
  tags:
    - compliance
    - kyc
    - salesforce
    - snowflake
    - okta
    - microsoft-teams
    - banking
capability:
  exposes:
    - type: mcp
      namespace: kyc-ops
      port: 8080
      tools:
        - name: onboard-customer
          description: "Given a customer name and application ID, create a CRM case, run KYC checks, provision access, and notify compliance. Use for new commercial banking customer onboarding."
          inputParameters:
            - name: customer_name
              in: body
              type: string
              description: "The customer company name."
            - name: application_id
              in: body
              type: string
              description: "The KYC application ID."
          steps:
            - name: create-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "KYC Onboarding: {{customer_name}}"
                application_id: "{{application_id}}"
            - name: run-kyc-checks
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "CALL COMPLIANCE.RUN_KYC_CHECK('{{application_id}}')"
            - name: provision-access
              type: call
              call: "okta.create-user"
              with:
                company_name: "{{customer_name}}"
                application_id: "{{application_id}}"
            - name: notify-compliance
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_kyc_channel"
                text: "KYC onboarding complete for {{customer_name}} ({{application_id}}). Case: {{create-case.id}}. KYC status: {{run-kyc-checks.result}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://wellsfargo.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: okta
      baseUri: "https://wellsfargo.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users"
          operations:
            - name: create-user
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves an approved Workday job requisition and publishes it to LinkedIn Jobs, logging the external posting record back in Workday for recruiting pipeline tracking.

naftiko: "0.5"
info:
  label: "LinkedIn Job Posting for Open Requisitions"
  description: "Retrieves an approved Workday job requisition and publishes it to LinkedIn Jobs, logging the external posting record back in Workday for recruiting pipeline tracking."
  tags:
    - hr
    - recruiting
    - workday
    - linkedin
capability:
  exposes:
    - type: mcp
      namespace: talent-acquisition
      port: 8080
      tools:
        - name: post-job-to-linkedin
          description: "Given a Workday job requisition ID, retrieve the job details and publish the opening to LinkedIn Jobs. Use when a requisition is approved and ready for external advertising."
          inputParameters:
            - name: requisition_id
              in: body
              type: string
              description: "Workday job requisition ID (e.g. JR-00023456)."
            - name: linkedin_organization_id
              in: body
              type: string
              description: "LinkedIn organization ID for the Wells Fargo company page."
          steps:
            - name: get-requisition
              type: call
              call: workday-ta.get-job-requisition
              with:
                requisition_id: "{{requisition_id}}"
            - name: publish-job-posting
              type: call
              call: linkedin.create-job-posting
              with:
                organization_id: "{{linkedin_organization_id}}"
                title: "{{get-requisition.job_title}}"
                description: "{{get-requisition.job_description}}"
                location: "{{get-requisition.location}}"
  consumes:
    - type: http
      namespace: workday-ta
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: job-requisitions
          path: "/wellsfargo/jobRequisitions/{{requisition_id}}"
          inputParameters:
            - name: requisition_id
              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-postings
          path: "/jobPostings"
          operations:
            - name: create-job-posting
              method: POST

Monitors Linkerd golden signals from Snowflake metrics, flags SLO breaches, creates ServiceNow incidents, and alerts the SRE team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Linkerd Service Mesh Golden Signal Monitor"
  description: "Monitors Linkerd golden signals from Snowflake metrics, flags SLO breaches, creates ServiceNow incidents, and alerts the SRE team via Microsoft Teams."
  tags:
    - infrastructure
    - linkerd
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: linkerd_service_mesh
      port: 8080
      tools:
        - name: linkerd-service
          description: "Given an execution date, run the linkerd service mesh golden signal monitor process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.LINKERD_SERVICE_MESH_GOLDEN_SIGNAL_MONITOR LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.LINKERD_SERVICE_MESH_GOLDEN_SIGNAL_MONITOR_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "infrastructure"
                short_description: "Linkerd Service Mesh Golden Signal Monitor processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_linkerd_service_mesh_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Tracks loan origination status by querying Snowflake for pipeline data, updating the Salesforce opportunity, and publishing a summary to Microsoft Teams.

naftiko: "0.5"
info:
  label: "Loan Origination Status Tracker"
  description: "Tracks loan origination status by querying Snowflake for pipeline data, updating the Salesforce opportunity, and publishing a summary to Microsoft Teams."
  tags:
    - lending
    - snowflake
    - salesforce
    - microsoft-teams
    - banking
capability:
  exposes:
    - type: mcp
      namespace: lending-ops
      port: 8080
      tools:
        - name: track-loan-status
          description: "Given a loan application ID, pull pipeline status from Snowflake, sync to Salesforce, and notify the originations team. Use for daily loan pipeline reviews."
          inputParameters:
            - name: loan_app_id
              in: body
              type: string
              description: "The loan application ID."
          steps:
            - name: get-pipeline-status
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM LENDING.LOAN_PIPELINE WHERE app_id='{{loan_app_id}}'"
            - name: update-opportunity
              type: call
              call: "salesforce.update-opportunity"
              with:
                opportunity_id: "{{get-pipeline-status.sf_opportunity_id}}"
                stage: "{{get-pipeline-status.current_stage}}"
            - name: notify-originations
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_lending_channel"
                text: "Loan {{loan_app_id}} status: {{get-pipeline-status.current_stage}}. Updated in Salesforce."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://wellsfargo.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: update-opportunity
              method: PATCH
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Pulls data classification results from Microsoft Purview, aggregates in Snowflake, and distributes the compliance summary to the data governance team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Microsoft Purview Data Classification Report"
  description: "Pulls data classification results from Microsoft Purview, aggregates in Snowflake, and distributes the compliance summary to the data governance team via Microsoft Teams."
  tags:
    - data-governance
    - microsoft-purview
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: microsoft_purview_da
      port: 8080
      tools:
        - name: microsoft-purview
          description: "Given an execution date, run the microsoft purview data classification report process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.MICROSOFT_PURVIEW_DATA_CLASSIFICATION_REPORT LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.MICROSOFT_PURVIEW_DATA_CLASSIFICATION_REPORT_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_microsoft_purview_da_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Sends a message to a specified Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Microsoft Teams Channel Message Sender"
  description: "Sends a message to a specified Microsoft Teams channel."
  tags:
    - collaboration
    - microsoft-teams
    - messaging
capability:
  exposes:
    - type: mcp
      namespace: collaboration
      port: 8080
      tools:
        - name: send-channel-message
          description: "Given a Teams team ID, channel ID, and message text, post a message. Use for automated notifications."
          inputParameters:
            - name: team_id
              in: body
              type: string
              description: "The Teams team ID."
            - name: channel_id
              in: body
              type: string
              description: "The Teams channel ID."
            - name: message_text
              in: body
              type: string
              description: "The message body."
          call: "msteams.send-channel-message"
          with:
            team_id: "{{team_id}}"
            channel_id: "{{channel_id}}"
            text: "{{message_text}}"
          outputParameters:
            - name: message_id
              type: string
              mapping: "$.id"
  consumes:
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

Retrieves mortgage application documents from Salesforce, validates completeness in Snowflake, and notifies the underwriting team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Mortgage Application Document Verification"
  description: "Retrieves mortgage application documents from Salesforce, validates completeness in Snowflake, and notifies the underwriting team via Microsoft Teams."
  tags:
    - banking
    - mortgage
    - salesforce
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: mortgage-ops
      port: 8080
      tools:
        - name: verify-mortgage-docs
          description: "Given a mortgage application ID, verify document completeness and notify underwriting. Use for mortgage pipeline processing."
          inputParameters:
            - name: application_id
              in: body
              type: string
              description: "The mortgage application ID."
          steps:
            - name: get-application
              type: call
              call: "salesforce.get-opportunity"
              with:
                opportunity_id: "{{application_id}}"
            - name: check-documents
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT COUNT(*) as doc_count FROM MORTGAGE.APPLICATION_DOCS WHERE app_id = '{{application_id}}'"
            - name: notify-underwriting
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_underwriting_channel"
                text: "Mortgage app {{application_id}} ({{get-application.stage}}): {{check-documents.doc_count}} documents uploaded."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://wellsfargo.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: get-opportunity
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a mortgage application is submitted, retrieves the applicant record from Salesforce, runs document verification via Snowflake, and notifies the underwriting team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Mortgage Document Verification Chain"
  description: "When a mortgage application is submitted, retrieves the applicant record from Salesforce, runs document verification via Snowflake, and notifies the underwriting team in Microsoft Teams."
  tags:
    - lending
    - salesforce
    - snowflake
    - microsoft-teams
    - banking
capability:
  exposes:
    - type: mcp
      namespace: mortgage-ops
      port: 8080
      tools:
        - name: verify-mortgage-docs
          description: "Given a Salesforce case ID for a mortgage application, pull applicant details, run document checks, and notify underwriters. Use when new mortgage applications enter the pipeline."
          inputParameters:
            - name: case_id
              in: body
              type: string
              description: "The Salesforce case ID for the mortgage application."
            - name: applicant_email
              in: body
              type: string
              description: "The applicant email address."
          steps:
            - name: get-case
              type: call
              call: "salesforce.get-case"
              with:
                case_id: "{{case_id}}"
            - name: verify-docs
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM LENDING.DOC_VERIFICATION WHERE case_id='{{case_id}}'"
            - name: notify-underwriting
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_underwriting_channel"
                text: "Mortgage doc verification complete for case {{case_id}} ({{get-case.applicant_name}}). Status: {{verify-docs.status}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://wellsfargo.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case/{{case_id}}"
          inputParameters:
            - name: case_id
              in: path
          operations:
            - name: get-case
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When an n8n automation workflow fails, captures error details, creates a ServiceNow incident, and notifies the automation team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "n8n Workflow Failure Handler"
  description: "When an n8n automation workflow fails, captures error details, creates a ServiceNow incident, and notifies the automation team via Microsoft Teams."
  tags:
    - automation
    - n8n
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: n8n_workflow_failure
      port: 8080
      tools:
        - name: n8n-workflow
          description: "Given an execution date, run the n8n workflow failure handler process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.N8N_WORKFLOW_FAILURE_HANDLER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.N8N_WORKFLOW_FAILURE_HANDLER_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "automation"
                short_description: "n8n Workflow Failure Handler processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_n8n_workflow_failure_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a new employee is created in Workday, opens a ServiceNow IT onboarding ticket, provisions Microsoft 365 access, and sends a Microsoft Teams welcome message.

naftiko: "0.5"
info:
  label: "New Employee Onboarding Orchestrator"
  description: "When a new employee is created in Workday, opens a ServiceNow IT onboarding ticket, provisions Microsoft 365 access, and sends a Microsoft Teams welcome message."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-employee-onboarding
          description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence across ServiceNow and Microsoft Teams. Invoke when a new banker, analyst, or operations associate begins employment at Wells Fargo."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID for the new employee."
            - name: start_date
              in: body
              type: string
              description: "Employment start date in ISO 8601 format (YYYY-MM-DD)."
            - name: business_line
              in: body
              type: string
              description: "Wells Fargo business line (e.g. Consumer Banking, Wealth Management, Commercial Banking)."
          steps:
            - name: get-worker
              type: call
              call: workday.get-worker
              with:
                worker_id: "{{workday_employee_id}}"
            - name: open-it-ticket
              type: call
              call: servicenow.create-incident
              with:
                category: hr_onboarding
                short_description: "New employee onboarding: {{get-worker.full_name}} — {{business_line}}"
                assigned_group: IT_Onboarding
            - name: send-welcome
              type: call
              call: msteams.send-message
              with:
                recipient_upn: "{{get-worker.work_email}}"
                text: "Welcome to Wells Fargo, {{get-worker.first_name}}! Your IT onboarding ticket is {{open-it-ticket.number}}. Your start date is {{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: workers
          path: "/wellsfargo/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/users/{{upn}}/chats"
          inputParameters:
            - name: upn
              in: path
          operations:
            - name: send-message
              method: POST

When a new hire start date approaches, creates an Azure AD account, provisions SailPoint entitlements, opens a ServiceNow hardware request, and notifies the manager via Microsoft Teams.

naftiko: "0.5"
info:
  label: "New Hire IT Provisioning Workflow"
  description: "When a new hire start date approaches, creates an Azure AD account, provisions SailPoint entitlements, opens a ServiceNow hardware request, and notifies the manager via Microsoft Teams."
  tags:
    - hr
    - onboarding
    - azure-active-directory
    - sailpoint
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: new_hire_it_provisio
      port: 8080
      tools:
        - name: new-hire
          description: "Given an execution date, run the new hire it provisioning workflow process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.NEW_HIRE_IT_PROVISIONING_WORKFLOW LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.NEW_HIRE_IT_PROVISIONING_WORKFLOW_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "hr"
                short_description: "New Hire IT Provisioning Workflow processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_new_hire_it_provisio_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves application health status from New Relic including response time, error rate, and throughput.

naftiko: "0.5"
info:
  label: "New Relic Application Health Check"
  description: "Retrieves application health status from New Relic including response time, error rate, and throughput."
  tags:
    - monitoring
    - new-relic
    - banking
capability:
  exposes:
    - type: mcp
      namespace: apm-health
      port: 8080
      tools:
        - name: get-app-health
          description: "Given a New Relic application ID, return the current response time, error rate, and throughput. Use for application performance monitoring."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "The New Relic application ID."
          call: "newrelic.get-application"
          with:
            app_id: "{{app_id}}"
          outputParameters:
            - name: response_time
              type: string
              mapping: "$.application.application_summary.response_time"
            - name: error_rate
              type: string
              mapping: "$.application.application_summary.error_rate"
            - name: throughput
              type: string
              mapping: "$.application.application_summary.throughput"
  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: applications
          path: "/applications/{{app_id}}.json"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: get-application
              method: GET

Retrieves an Okta user profile by login email, returning status, name, and last login time.

naftiko: "0.5"
info:
  label: "Okta User Lookup"
  description: "Retrieves an Okta user profile by login email, returning status, name, and last login time."
  tags:
    - identity
    - okta
    - banking
capability:
  exposes:
    - type: mcp
      namespace: iam-lookup
      port: 8080
      tools:
        - name: get-user
          description: "Given an Okta user login email, return the user status, display name, and last login timestamp. Use for access management verification."
          inputParameters:
            - name: user_login
              in: body
              type: string
              description: "The Okta user login email address."
          call: "okta.get-user"
          with:
            login: "{{user_login}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: display_name
              type: string
              mapping: "$.profile.displayName"
            - name: last_login
              type: string
              mapping: "$.lastLogin"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://wellsfargo.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users/{{login}}"
          inputParameters:
            - name: login
              in: path
          operations:
            - name: get-user
              method: GET

Retrieves regulatory documents from SharePoint, summarizes them using the OpenAI API, stores summaries in Snowflake, and distributes to the legal team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "OpenAI Document Summarization Pipeline"
  description: "Retrieves regulatory documents from SharePoint, summarizes them using the OpenAI API, stores summaries in Snowflake, and distributes to the legal team via Microsoft Teams."
  tags:
    - ai
    - openai
    - sharepoint
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: openai_document_summ
      port: 8080
      tools:
        - name: openai-document
          description: "Given an execution date, run the openai document summarization pipeline process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.OPENAI_DOCUMENT_SUMMARIZATION_PIPELINE LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.OPENAI_DOCUMENT_SUMMARIZATION_PIPELINE_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_openai_document_summ_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When Palo Alto Networks detects a critical threat, logs the event in Splunk, creates a ServiceNow security incident, and alerts the SOC via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Palo Alto Firewall Threat Handler"
  description: "When Palo Alto Networks detects a critical threat, logs the event in Splunk, creates a ServiceNow security incident, and alerts the SOC via Microsoft Teams."
  tags:
    - security
    - palo-alto-networks
    - splunk
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: palo_alto_firewall_t
      port: 8080
      tools:
        - name: palo-alto
          description: "Given an execution date, run the palo alto firewall threat handler process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.PALO_ALTO_FIREWALL_THREAT_HANDLER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.PALO_ALTO_FIREWALL_THREAT_HANDLER_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "security"
                short_description: "Palo Alto Firewall Threat Handler processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_palo_alto_firewall_t_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: splunk
      baseUri: "https://wellsfargo-splunk.example.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: events
          path: "/receivers/simple"
          operations:
            - name: index-event
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When Palo Alto Networks detects a critical threat, creates a ServiceNow security incident, enriches it with threat intelligence, and alerts the SOC Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Palo Alto Networks Security Incident Triage"
  description: "When Palo Alto Networks detects a critical threat, creates a ServiceNow security incident, enriches it with threat intelligence, and alerts the SOC Microsoft Teams channel."
  tags:
    - security
    - palo-alto
    - servicenow
    - microsoft-teams
    - secops
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: soc-ops
      port: 8080
      tools:
        - name: triage-network-threat
          description: "Given a Palo Alto Networks threat ID and severity, create a ServiceNow security incident and alert the SOC Microsoft Teams channel. Invoke on critical or high Palo Alto threat notifications."
          inputParameters:
            - name: threat_id
              in: body
              type: string
              description: "Palo Alto Networks threat log ID."
            - name: severity
              in: body
              type: string
              description: "Threat severity: critical, high, medium."
            - name: source_ip
              in: body
              type: string
              description: "Source IP address of the detected threat."
            - name: threat_name
              in: body
              type: string
              description: "Name or type of the detected threat (e.g. command-and-control, malware)."
          steps:
            - name: get-threat-details
              type: call
              call: palo-alto.get-threat-log
              with:
                threat_id: "{{threat_id}}"
            - name: create-security-incident
              type: call
              call: servicenow-soc.create-incident
              with:
                category: security
                impact: "{{severity}}"
                short_description: "Network threat: {{threat_name}} from {{source_ip}}"
                description: "Palo Alto threat {{threat_id}}: {{threat_name}}. Source: {{source_ip}}. Category: {{get-threat-details.category}}."
            - name: alert-soc
              type: call
              call: msteams-soc.send-message
              with:
                channel_id: "$secrets.teams_soc_channel_id"
                text: "SOC Alert: {{severity}} threat — {{threat_name}} from {{source_ip}}. ServiceNow: {{create-security-incident.number}}. Threat ID: {{threat_id}}."
  consumes:
    - type: http
      namespace: palo-alto
      baseUri: "https://wfc-panorama.internal/restapi/v10.1"
      authentication:
        type: apikey
        key: "X-PAN-KEY"
        value: "$secrets.palo_alto_api_key"
        placement: header
      resources:
        - name: threat-logs
          path: "/log/threat"
          inputParameters:
            - name: threat_id
              in: query
          operations:
            - name: get-threat-log
              method: GET
    - type: http
      namespace: servicenow-soc
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/sn_si_incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams-soc
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Orchestrates PCI-DSS compliance scanning by triggering Palo Alto vulnerability scans, storing results in Snowflake, creating remediation tickets in Jira, and notifying the security team.

naftiko: "0.5"
info:
  label: "PCI-DSS Compliance Scan Chain"
  description: "Orchestrates PCI-DSS compliance scanning by triggering Palo Alto vulnerability scans, storing results in Snowflake, creating remediation tickets in Jira, and notifying the security team."
  tags:
    - security
    - pci
    - palo-alto-networks
    - snowflake
    - jira
    - microsoft-teams
    - banking
capability:
  exposes:
    - type: mcp
      namespace: security-compliance
      port: 8080
      tools:
        - name: run-pci-scan
          description: "Given a target environment and scan scope, run vulnerability scans, record findings, create remediation tickets, and alert security. Use for quarterly PCI-DSS compliance."
          inputParameters:
            - name: environment
              in: body
              type: string
              description: "Target environment (PRODUCTION, STAGING, DR)."
            - name: scan_scope
              in: body
              type: string
              description: "Scan scope (FULL, DELTA, CARDHOLDER_ONLY)."
          steps:
            - name: trigger-scan
              type: call
              call: "paloalto.run-scan"
              with:
                environment: "{{environment}}"
                scope: "{{scan_scope}}"
            - name: store-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO SECURITY.PCI_SCAN_RESULTS VALUES ('{{environment}}', '{{scan_scope}}', CURRENT_TIMESTAMP)"
            - name: create-remediation
              type: call
              call: "jira.create-issue"
              with:
                project: "PCIDSS"
                issue_type: "Task"
                summary: "PCI scan findings: {{environment}} ({{scan_scope}}) - {{trigger-scan.finding_count}} issues"
            - name: notify-security
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_security_channel"
                text: "PCI-DSS scan complete for {{environment}}: {{trigger-scan.finding_count}} findings. Remediation: {{create-remediation.key}}."
  consumes:
    - type: http
      namespace: paloalto
      baseUri: "https://panorama.wellsfargo.com/restapi/v10.1"
      authentication:
        type: apikey
        key: "X-PAN-KEY"
        value: "$secrets.paloalto_api_key"
        placement: header
      resources:
        - name: scans
          path: "/vulnerability/scan"
          operations:
            - name: run-scan
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://wellsfargo.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Triggers a Postman collection test run and returns the pass/fail summary.

naftiko: "0.5"
info:
  label: "Postman API Collection Test Runner"
  description: "Triggers a Postman collection test run and returns the pass/fail summary."
  tags:
    - devops
    - postman
    - api-testing
capability:
  exposes:
    - type: mcp
      namespace: api-testing
      port: 8080
      tools:
        - name: run-collection
          description: "Given a Postman collection ID, trigger a test run and return results. Use for API regression testing."
          inputParameters:
            - name: collection_id
              in: body
              type: string
              description: "The Postman collection ID."
          call: "postman.run-collection"
          with:
            collection_id: "{{collection_id}}"
          outputParameters:
            - name: total_tests
              type: integer
              mapping: "$.run.stats.tests.total"
            - name: failed_tests
              type: integer
              mapping: "$.run.stats.tests.failed"
  consumes:
    - type: http
      namespace: postman
      baseUri: "https://api.getpostman.com"
      authentication:
        type: apikey
        key: "X-Api-Key"
        value: "$secrets.postman_api_key"
        placement: header
      resources:
        - name: collections
          path: "/collections/{{collection_id}}/run"
          inputParameters:
            - name: collection_id
              in: path
          operations:
            - name: run-collection
              method: POST

Checks the last refresh status of a Power BI dataset and returns the refresh state and timestamp.

naftiko: "0.5"
info:
  label: "Power BI Dataset Refresh Check"
  description: "Checks the last refresh status of a Power BI dataset and returns the refresh state and timestamp."
  tags:
    - analytics
    - power-bi
    - banking
capability:
  exposes:
    - type: mcp
      namespace: bi-ops
      port: 8080
      tools:
        - name: get-refresh-status
          description: "Given a Power BI group ID and dataset ID, return the last refresh status and end time. Use for dashboard reliability monitoring."
          inputParameters:
            - name: group_id
              in: body
              type: string
              description: "The Power BI workspace (group) ID."
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID."
          call: "powerbi.get-refresh-history"
          with:
            group_id: "{{group_id}}"
            dataset_id: "{{dataset_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.value[0].status"
            - name: end_time
              type: string
              mapping: "$.value[0].endTime"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: refreshes
          path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: group_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: get-refresh-history
              method: GET

Checks the last refresh status and timestamp for a Power BI dataset.

naftiko: "0.5"
info:
  label: "Power BI Dataset Refresh Status"
  description: "Checks the last refresh status and timestamp for a Power BI dataset."
  tags:
    - analytics
    - power-bi
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: get-dataset-refresh-status
          description: "Given a Power BI workspace and dataset ID, retrieve the last refresh status. Use for dashboard monitoring."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "The Power BI workspace ID."
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID."
          call: "powerbi.get-refresh-history"
          with:
            workspace_id: "{{workspace_id}}"
            dataset_id: "{{dataset_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.value[0].status"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: workspace_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: get-refresh-history
              method: GET

Triggers a Power BI dataset refresh for regulatory compliance dashboards and posts the refresh status to the compliance Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Power BI Regulatory Dashboard Refresh"
  description: "Triggers a Power BI dataset refresh for regulatory compliance dashboards and posts the refresh status to the compliance Microsoft Teams channel."
  tags:
    - compliance
    - data
    - power-bi
    - microsoft-teams
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: compliance-reporting
      port: 8080
      tools:
        - name: refresh-regulatory-dashboard
          description: "Given a Power BI workspace ID and dataset ID, trigger a refresh for a regulatory compliance dashboard and post the result to the compliance Teams channel. Use after Snowflake regulatory data pipelines complete."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "Power BI workspace (group) ID."
            - name: dataset_id
              in: body
              type: string
              description: "Power BI dataset ID for the regulatory dashboard."
            - name: report_name
              in: body
              type: string
              description: "Human-readable name of the regulatory report (e.g. CCAR Dashboard)."
          steps:
            - name: trigger-refresh
              type: call
              call: powerbi.trigger-refresh
              with:
                group_id: "{{workspace_id}}"
                dataset_id: "{{dataset_id}}"
            - name: notify-compliance
              type: call
              call: msteams-pbi.send-message
              with:
                channel_id: "$secrets.teams_compliance_channel_id"
                text: "Power BI refresh triggered: {{report_name}} (dataset {{dataset_id}}). Status: {{trigger-refresh.status}}."
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-refreshes
          path: "/groups/{{group_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: group_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST
    - type: http
      namespace: msteams-pbi
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Triggers Power Query data model refreshes, validates row counts in Snowflake, and notifies the BI team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Power Query Data Model Refresh Chain"
  description: "Triggers Power Query data model refreshes, validates row counts in Snowflake, and notifies the BI team via Microsoft Teams."
  tags:
    - analytics
    - power-query
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: power_query_data_mod
      port: 8080
      tools:
        - name: power-query
          description: "Given an execution date, run the power query data model refresh chain process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.POWER_QUERY_DATA_MODEL_REFRESH_CHAIN LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.POWER_QUERY_DATA_MODEL_REFRESH_CHAIN_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_power_query_data_mod_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Analyzes Qlik Sense application usage patterns from Snowflake, identifies underutilized assets, creates Jira optimization tasks, and notifies the BI team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Qlik Sense App Usage Analyzer"
  description: "Analyzes Qlik Sense application usage patterns from Snowflake, identifies underutilized assets, creates Jira optimization tasks, and notifies the BI team via Microsoft Teams."
  tags:
    - analytics
    - qlik-sense
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: qlik_sense_app_usage
      port: 8080
      tools:
        - name: qlik-sense
          description: "Given an execution date, run the qlik sense app usage analyzer process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.QLIK_SENSE_APP_USAGE_ANALYZER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.QLIK_SENSE_APP_USAGE_ANALYZER_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "WFOPS"
                issue_type: "Task"
                summary: "Qlik Sense App Usage Analyzer - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_qlik_sense_app_usage_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://wellsfargo.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Prepares stress test data by aggregating loan portfolios in Snowflake, validates data quality, refreshes Power BI reports, and notifies the CCAR team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Quarterly Stress Test Data Preparation"
  description: "Prepares stress test data by aggregating loan portfolios in Snowflake, validates data quality, refreshes Power BI reports, and notifies the CCAR team via Microsoft Teams."
  tags:
    - risk
    - regulatory
    - snowflake
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: quarterly_stress_tes
      port: 8080
      tools:
        - name: quarterly-stress
          description: "Given an execution date, run the quarterly stress test data preparation process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.QUARTERLY_STRESS_TEST_DATA_PREPARATION LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.QUARTERLY_STRESS_TEST_DATA_PREPARATION_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_quarterly_stress_tes_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Validates Refinitiv market data feed quality in Snowflake, flags stale or missing data points, and alerts the market data team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Refinitiv Market Data Quality Validator"
  description: "Validates Refinitiv market data feed quality in Snowflake, flags stale or missing data points, and alerts the market data team via Microsoft Teams."
  tags:
    - trading
    - refinitiv
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: refinitiv_market_dat
      port: 8080
      tools:
        - name: refinitiv-market
          description: "Given an execution date, run the refinitiv market data quality validator process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.REFINITIV_MARKET_DATA_QUALITY_VALIDATOR LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.REFINITIV_MARKET_DATA_QUALITY_VALIDATOR_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_refinitiv_market_dat_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Computes regulatory capital ratios from Snowflake, refreshes the Power BI compliance dashboard, and distributes to the finance team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Regulatory Capital Report Generator"
  description: "Computes regulatory capital ratios from Snowflake, refreshes the Power BI compliance dashboard, and distributes to the finance team via Microsoft Teams."
  tags:
    - compliance
    - regulatory
    - snowflake
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: regulatory_capital_r
      port: 8080
      tools:
        - name: regulatory-capital
          description: "Given an execution date, run the regulatory capital report generator process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.REGULATORY_CAPITAL_REPORT_GENERATOR LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.REGULATORY_CAPITAL_REPORT_GENERATOR_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_regulatory_capital_r_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Generates a quarterly regulatory compliance report by pulling data from Snowflake, refreshing Power BI dashboards, uploading to SharePoint, and notifying stakeholders via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Regulatory Compliance Report Generator"
  description: "Generates a quarterly regulatory compliance report by pulling data from Snowflake, refreshing Power BI dashboards, uploading to SharePoint, and notifying stakeholders via Microsoft Teams."
  tags:
    - compliance
    - snowflake
    - power-bi
    - sharepoint
    - microsoft-teams
    - banking
capability:
  exposes:
    - type: mcp
      namespace: compliance-reporting
      port: 8080
      tools:
        - name: generate-compliance-report
          description: "Given a regulatory report type and reporting period, extract compliance data, refresh the Power BI dashboard, upload to SharePoint, and notify stakeholders. Use for OCC and Fed reporting cycles."
          inputParameters:
            - name: report_type
              in: body
              type: string
              description: "The regulatory report type (e.g., CCAR, DFAST, BSA)."
            - name: reporting_period
              in: body
              type: string
              description: "The reporting period in YYYY-QN format."
          steps:
            - name: extract-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM COMPLIANCE.{{report_type}}_DATA WHERE period='{{reporting_period}}'"
            - name: refresh-dashboard
              type: call
              call: "powerbi.trigger-refresh"
              with:
                dataset_id: "$secrets.compliance_dataset_id"
            - name: upload-report
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "$secrets.compliance_site_id"
                file_name: "{{report_type}}_{{reporting_period}}.xlsx"
            - name: notify-compliance
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_compliance_channel"
                text: "{{report_type}} report for {{reporting_period}} is ready. SharePoint link: {{upload-report.webUrl}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: refreshes
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/sites/{{site_id}}/drive/root:/{{file_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_name
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Checks the identity governance status for a user in SailPoint, returning access certifications and risk score.

naftiko: "0.5"
info:
  label: "SailPoint Identity Governance Check"
  description: "Checks the identity governance status for a user in SailPoint, returning access certifications and risk score."
  tags:
    - identity
    - sailpoint
    - governance
capability:
  exposes:
    - type: mcp
      namespace: identity-governance
      port: 8080
      tools:
        - name: get-identity-status
          description: "Given a SailPoint identity ID, retrieve governance status including pending certifications and risk score. Use for access reviews."
          inputParameters:
            - name: identity_id
              in: body
              type: string
              description: "The SailPoint identity ID."
          call: "sailpoint.get-identity"
          with:
            identity_id: "{{identity_id}}"
          outputParameters:
            - name: risk_score
              type: integer
              mapping: "$.riskScore"
            - name: pending_certifications
              type: integer
              mapping: "$.pendingCertifications"
  consumes:
    - type: http
      namespace: sailpoint
      baseUri: "https://wellsfargo.api.identitynow.com/v3"
      authentication:
        type: bearer
        token: "$secrets.sailpoint_token"
      resources:
        - name: identities
          path: "/identities/{{identity_id}}"
          inputParameters:
            - name: identity_id
              in: path
          operations:
            - name: get-identity
              method: GET

Retrieves a Salesforce account record by account ID, returning name, industry, and annual revenue.

naftiko: "0.5"
info:
  label: "Salesforce Account Detail Lookup"
  description: "Retrieves a Salesforce account record by account ID, returning name, industry, and annual revenue."
  tags:
    - crm
    - salesforce
    - banking
capability:
  exposes:
    - type: mcp
      namespace: crm-lookup
      port: 8080
      tools:
        - name: get-account
          description: "Given a Salesforce account ID, return the account name, industry, and annual revenue. Use for relationship manager inquiries."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce account ID."
          call: "salesforce.get-account"
          with:
            account_id: "{{account_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.Name"
            - name: industry
              type: string
              mapping: "$.Industry"
            - name: annual_revenue
              type: string
              mapping: "$.AnnualRevenue"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://wellsfargo.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET

Retrieves a Salesforce account by ID, returning name, industry, annual revenue, and relationship tier.

naftiko: "0.5"
info:
  label: "Salesforce Account Lookup"
  description: "Retrieves a Salesforce account by ID, returning name, industry, annual revenue, and relationship tier."
  tags:
    - sales
    - salesforce
    - crm
capability:
  exposes:
    - type: mcp
      namespace: sales
      port: 8080
      tools:
        - name: get-account
          description: "Given a Salesforce account ID, retrieve account details including industry and revenue. Use for client reviews."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce account ID."
          call: "salesforce.get-account"
          with:
            account_id: "{{account_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.Name"
            - name: annual_revenue
              type: string
              mapping: "$.AnnualRevenue"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://wellsfargo.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET

Synchronizes Salesforce opportunity pipeline data to Snowflake for executive revenue reporting and notifies the sales leadership team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Salesforce CRM Opportunity Pipeline Sync"
  description: "Synchronizes Salesforce opportunity pipeline data to Snowflake for executive revenue reporting and notifies the sales leadership team via Microsoft Teams."
  tags:
    - sales
    - crm
    - salesforce
    - snowflake
    - microsoft-teams
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: crm-reporting
      port: 8080
      tools:
        - name: sync-opportunity-pipeline
          description: "Given a Salesforce forecast category and fiscal quarter, retrieve open opportunities, write a pipeline snapshot to Snowflake, and notify sales leadership in Microsoft Teams. Use for quarterly pipeline reviews."
          inputParameters:
            - name: fiscal_quarter
              in: body
              type: string
              description: "Fiscal quarter in YYYY-QN format (e.g. 2025-Q2)."
            - name: forecast_category
              in: body
              type: string
              description: "Salesforce forecast category filter (e.g. Commit, BestCase, Pipeline)."
          steps:
            - name: get-opportunities
              type: call
              call: salesforce.search-opportunities
              with:
                fiscal_quarter: "{{fiscal_quarter}}"
                forecast_category: "{{forecast_category}}"
            - name: write-pipeline-snapshot
              type: call
              call: snowflake.insert-row
              with:
                table: "SALES.PIPELINE_SNAPSHOTS"
                fiscal_quarter: "{{fiscal_quarter}}"
                opportunity_count: "{{get-opportunities.totalSize}}"
                total_amount: "{{get-opportunities.total_amount}}"
            - name: notify-leadership
              type: call
              call: msteams-sales.send-message
              with:
                channel_id: "$secrets.teams_sales_channel_id"
                text: "Pipeline sync complete for {{fiscal_quarter}} ({{forecast_category}}): {{get-opportunities.totalSize}} opportunities, total value {{get-opportunities.total_amount}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://wellsfargo.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: search-opportunities
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: insert-row
              method: POST
    - type: http
      namespace: msteams-sales
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Runs churn prediction models in Snowflake against Salesforce CRM data, identifies at-risk accounts, and notifies relationship managers via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Salesforce Customer Churn Prediction Pipeline"
  description: "Runs churn prediction models in Snowflake against Salesforce CRM data, identifies at-risk accounts, and notifies relationship managers via Microsoft Teams."
  tags:
    - analytics
    - salesforce
    - snowflake
    - microsoft-teams
    - machine-learning
capability:
  exposes:
    - type: mcp
      namespace: salesforce_customer_
      port: 8080
      tools:
        - name: salesforce-customer
          description: "Given an execution date, run the salesforce customer churn prediction pipeline process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.SALESFORCE_CUSTOMER_CHURN_PREDICTION_PIPELINE LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.SALESFORCE_CUSTOMER_CHURN_PREDICTION_PIPELINE_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_salesforce_customer__channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a new commercial banking customer is approved, creates a Salesforce onboarding case, links the account record, and notifies the relationship manager via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Salesforce Customer Onboarding Case Creation"
  description: "When a new commercial banking customer is approved, creates a Salesforce onboarding case, links the account record, and notifies the relationship manager via Microsoft Teams."
  tags:
    - customer-onboarding
    - salesforce
    - microsoft-teams
    - commercial-banking
capability:
  exposes:
    - type: mcp
      namespace: customer-onboarding
      port: 8080
      tools:
        - name: create-customer-onboarding-case
          description: "Given a Salesforce account ID and relationship manager UPN, create a customer onboarding case linked to the account and notify the relationship manager in Microsoft Teams. Use when a commercial banking customer completes credit approval."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "Salesforce account ID for the approved commercial customer."
            - name: rm_upn
              in: body
              type: string
              description: "Microsoft UPN of the assigned relationship manager."
            - name: product_type
              in: body
              type: string
              description: "Product being onboarded (e.g. Commercial Credit Line, Treasury Services)."
          steps:
            - name: get-account
              type: call
              call: salesforce-acct.get-account
              with:
                account_id: "{{account_id}}"
            - name: create-onboarding-case
              type: call
              call: salesforce-case.create-case
              with:
                account_id: "{{account_id}}"
                subject: "Customer Onboarding: {{get-account.name}} — {{product_type}}"
                type: New_Customer_Onboarding
            - name: notify-rm
              type: call
              call: msteams-rm.send-message
              with:
                recipient_upn: "{{rm_upn}}"
                text: "Onboarding case created for {{get-account.name}}: {{product_type}}. Salesforce case: {{create-onboarding-case.case_number}}. Please complete onboarding tasks in Salesforce."
  consumes:
    - type: http
      namespace: salesforce-acct
      baseUri: "https://wellsfargo.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET
    - type: http
      namespace: salesforce-case
      baseUri: "https://wellsfargo.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: msteams-rm
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/users/{{upn}}/chats"
          inputParameters:
            - name: upn
              in: path
          operations:
            - name: send-message
              method: POST

When a Salesforce customer NPS survey response is marked detractor, creates a follow-up case, assigns it to the relationship manager, and sends a recovery notification via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Salesforce NPS Survey Follow-Up Workflow"
  description: "When a Salesforce customer NPS survey response is marked detractor, creates a follow-up case, assigns it to the relationship manager, and sends a recovery notification via Microsoft Teams."
  tags:
    - customer-experience
    - salesforce
    - microsoft-teams
    - nps
    - customer-support
capability:
  exposes:
    - type: mcp
      namespace: nps-recovery
      port: 8080
      tools:
        - name: handle-nps-detractor
          description: "Given a Salesforce survey response ID, retrieve the detractor's account details, create a recovery case, and notify the relationship manager in Microsoft Teams. Invoke when an NPS score of 0-6 is submitted."
          inputParameters:
            - name: survey_response_id
              in: body
              type: string
              description: "Salesforce survey response record ID."
            - name: nps_score
              in: body
              type: integer
              description: "NPS score submitted (0-10)."
          steps:
            - name: get-survey-response
              type: call
              call: salesforce-survey.get-survey-response
              with:
                response_id: "{{survey_response_id}}"
            - name: create-recovery-case
              type: call
              call: salesforce-nps.create-case
              with:
                account_id: "{{get-survey-response.account_id}}"
                subject: "NPS Detractor Recovery: Score {{nps_score}} — {{get-survey-response.account_name}}"
                type: NPS_Recovery
            - name: notify-rm
              type: call
              call: msteams-nps.send-message
              with:
                recipient_upn: "{{get-survey-response.rm_upn}}"
                text: "NPS detractor alert: {{get-survey-response.account_name}} scored {{nps_score}}. Recovery case created: {{create-recovery-case.case_number}}. Please reach out within 24 hours."
  consumes:
    - type: http
      namespace: salesforce-survey
      baseUri: "https://wellsfargo.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: survey-responses
          path: "/sobjects/SurveyQuestionResponse/{{response_id}}"
          inputParameters:
            - name: response_id
              in: path
          operations:
            - name: get-survey-response
              method: GET
    - type: http
      namespace: salesforce-nps
      baseUri: "https://wellsfargo.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: msteams-nps
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/users/{{upn}}/chats"
          inputParameters:
            - name: upn
              in: path
          operations:
            - name: send-message
              method: POST

Pulls Salesforce win/loss data into Snowflake, generates analysis reports, refreshes Power BI dashboards, and sends insights to sales leadership via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Salesforce Opportunity Win/Loss Analyzer"
  description: "Pulls Salesforce win/loss data into Snowflake, generates analysis reports, refreshes Power BI dashboards, and sends insights to sales leadership via Microsoft Teams."
  tags:
    - sales
    - salesforce
    - snowflake
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: salesforce_opportuni
      port: 8080
      tools:
        - name: salesforce-opportunity
          description: "Given an execution date, run the salesforce opportunity win/loss analyzer process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.SALESFORCE_OPPORTUNITY_WIN_LOSS_ANALYZER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.SALESFORCE_OPPORTUNITY_WIN_LOSS_ANALYZER_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_salesforce_opportuni_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a Salesforce opportunity is closed (won or lost), syncs the outcome data to Snowflake for sales analytics and posts a notification to the sales leadership Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Salesforce Opportunity Win/Loss Snowflake Sync"
  description: "When a Salesforce opportunity is closed (won or lost), syncs the outcome data to Snowflake for sales analytics and posts a notification to the sales leadership Microsoft Teams channel."
  tags:
    - sales
    - salesforce
    - snowflake
    - microsoft-teams
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: sales-analytics
      port: 8080
      tools:
        - name: sync-opportunity-outcome
          description: "Given a Salesforce opportunity ID and close type (won or lost), retrieve full opportunity details, write the record to Snowflake sales analytics, and notify the sales leadership Teams channel. Invoke when an opportunity stage changes to Closed Won or Closed Lost."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "Salesforce opportunity ID (18-character)."
            - name: close_type
              in: body
              type: string
              description: "Close outcome: won or lost."
          steps:
            - name: get-opportunity
              type: call
              call: salesforce-opp.get-opportunity
              with:
                opportunity_id: "{{opportunity_id}}"
            - name: write-to-snowflake
              type: call
              call: snowflake-sales.execute-statement
              with:
                statement: "INSERT INTO SALES.OPPORTUNITY_OUTCOMES VALUES ('{{opportunity_id}}', '{{get-opportunity.name}}', '{{close_type}}', {{get-opportunity.amount}}, '{{get-opportunity.close_date}}')"
            - name: notify-sales-leadership
              type: call
              call: msteams-sales-ops.send-message
              with:
                channel_id: "$secrets.teams_sales_channel_id"
                text: "Opportunity {{close_type}}: {{get-opportunity.name}} — {{get-opportunity.amount}} {{get-opportunity.currency_iso_code}}. Closed by {{get-opportunity.owner_name}}."
  consumes:
    - type: http
      namespace: salesforce-opp
      baseUri: "https://wellsfargo.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{opportunity_id}}"
          inputParameters:
            - name: opportunity_id
              in: path
          operations:
            - name: get-opportunity
              method: GET
    - type: http
      namespace: snowflake-sales
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams-sales-ops
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When an SAP Concur expense report exceeds policy limits, logs the exception in Snowflake, creates a ServiceNow approval task, and notifies the manager via Microsoft Teams.

naftiko: "0.5"
info:
  label: "SAP Concur Expense Over-Limit Escalation"
  description: "When an SAP Concur expense report exceeds policy limits, logs the exception in Snowflake, creates a ServiceNow approval task, and notifies the manager via Microsoft Teams."
  tags:
    - finance
    - sap
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: sap_concur_expense_o
      port: 8080
      tools:
        - name: sap-concur
          description: "Given an execution date, run the sap concur expense over-limit escalation process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.SAP_CONCUR_EXPENSE_OVER_LIMIT_ESCALATION LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.SAP_CONCUR_EXPENSE_OVER_LIMIT_ESCALATION_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "finance"
                short_description: "SAP Concur Expense Over-Limit Escalation processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_sap_concur_expense_o_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a pending SAP Concur expense report, checks SAP GL cost center budget, and routes an approval notification to the manager via Microsoft Teams.

naftiko: "0.5"
info:
  label: "SAP Concur Expense Report Approval"
  description: "Retrieves a pending SAP Concur expense report, checks SAP GL cost center budget, and routes an approval notification to the manager via Microsoft Teams."
  tags:
    - finance
    - sap
    - microsoft-teams
    - expense-management
    - approval
capability:
  exposes:
    - type: mcp
      namespace: expense-approval
      port: 8080
      tools:
        - name: route-expense-for-approval
          description: "Given a Concur expense report ID and manager UPN, retrieve report details, validate against the SAP GL cost center budget, and send an approval notification to the manager in Microsoft Teams."
          inputParameters:
            - name: expense_report_id
              in: body
              type: string
              description: "SAP Concur expense report ID."
            - name: manager_upn
              in: body
              type: string
              description: "Microsoft UPN of the approving manager."
          steps:
            - name: get-expense-report
              type: call
              call: concur.get-expense-report
              with:
                report_id: "{{expense_report_id}}"
            - name: notify-manager
              type: call
              call: msteams-expense.send-message
              with:
                recipient_upn: "{{manager_upn}}"
                text: "Expense report pending approval: {{get-expense-report.name}} by {{get-expense-report.employee_name}}, total {{get-expense-report.total_amount}} {{get-expense-report.currency}}. Review in Concur."
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://www.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: expense-reports
          path: "/expense/reports/{{report_id}}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-expense-report
              method: GET
    - type: http
      namespace: msteams-expense
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/users/{{upn}}/chats"
          inputParameters:
            - name: upn
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves cost center details from SAP including responsible person and company code.

naftiko: "0.5"
info:
  label: "SAP Cost Center Lookup"
  description: "Retrieves cost center details from SAP including responsible person and company code."
  tags:
    - finance
    - sap
    - cost-management
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: get-cost-center
          description: "Given a SAP cost center ID, retrieve the master data. Use for budget allocation and reporting."
          inputParameters:
            - name: cost_center
              in: body
              type: string
              description: "The SAP cost center ID."
          call: "sap.get-cost-center"
          with:
            cost_center: "{{cost_center}}"
          outputParameters:
            - name: description
              type: string
              mapping: "$.d.CostCenterDescription"
            - name: responsible_person
              type: string
              mapping: "$.d.PersonResponsible"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://wellsfargo-s4.sap.com/sap/opu/odata/sap/API_COSTCENTER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: cost-centers
          path: "/A_CostCenter('{{cost_center}}')"
          inputParameters:
            - name: cost_center
              in: path
          operations:
            - name: get-cost-center
              method: GET

Retrieves the general ledger account balance from SAP for a given company code and fiscal period.

naftiko: "0.5"
info:
  label: "SAP General Ledger Balance Lookup"
  description: "Retrieves the general ledger account balance from SAP for a given company code and fiscal period."
  tags:
    - finance
    - sap
    - accounting
capability:
  exposes:
    - type: mcp
      namespace: accounting
      port: 8080
      tools:
        - name: get-gl-balance
          description: "Given a SAP company code and GL account, retrieve the account balance. Use for financial close and variance analysis."
          inputParameters:
            - name: company_code
              in: body
              type: string
              description: "The SAP company code."
            - name: gl_account
              in: body
              type: string
              description: "The GL account number."
          call: "sap.get-gl-balance"
          with:
            company_code: "{{company_code}}"
            gl_account: "{{gl_account}}"
          outputParameters:
            - name: balance
              type: string
              mapping: "$.d.EndingBalanceAmtInCoCodeCrcy"
            - name: currency
              type: string
              mapping: "$.d.CompanyCodeCurrency"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://wellsfargo-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRYITEMBASIC_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: gl-balances
          path: "/A_GLAccountLineItem"
          operations:
            - name: get-gl-balance
              method: GET

Queries SAP for open journal entries and unreconciled items that block period close, then creates a ServiceNow task for each blocker and notifies the finance Slack channel.

naftiko: "0.5"
info:
  label: "SAP General Ledger Period Close Check"
  description: "Queries SAP for open journal entries and unreconciled items that block period close, then creates a ServiceNow task for each blocker and notifies the finance Slack channel."
  tags:
    - finance
    - sap
    - servicenow
    - slack
    - period-close
capability:
  exposes:
    - type: mcp
      namespace: finance-close
      port: 8080
      tools:
        - name: check-gl-period-close
          description: "Given a SAP company code and fiscal period, check for open general ledger items, create ServiceNow tasks for each blocker, and post a readiness summary to the finance Slack channel. Use at month-end for period close orchestration."
          inputParameters:
            - name: company_code
              in: body
              type: string
              description: "SAP company code (e.g. WFC1 for Wells Fargo US)."
            - name: fiscal_period
              in: body
              type: string
              description: "Fiscal period in YYYYMM format (e.g. 202503)."
          steps:
            - name: get-open-items
              type: call
              call: sap.get-gl-open-items
              with:
                company_code: "{{company_code}}"
                fiscal_period: "{{fiscal_period}}"
            - name: create-close-task
              type: call
              call: servicenow-finance.create-task
              with:
                category: finance_period_close
                short_description: "GL close blocker: {{company_code}} — {{fiscal_period}}"
                description: "Open GL items blocking period close: {{get-open-items.open_count}} items, total {{get-open-items.total_amount}}"
            - name: post-summary
              type: call
              call: slack-finance.post-message
              with:
                channel: "finance-close-ops"
                text: "Period close readiness {{company_code}}/{{fiscal_period}}: {{get-open-items.open_count}} blocking items. Task: {{create-close-task.number}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://wfc-s4.sap.com/sap/opu/odata/sap/ZFI_GL_CLOSE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: gl-open-items
          path: "/GLOpenItemSet"
          inputParameters:
            - name: company_code
              in: query
            - name: fiscal_period
              in: query
          operations:
            - name: get-gl-open-items
              method: GET
    - type: http
      namespace: servicenow-finance
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: slack-finance
      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

Retrieves the current balance for a SAP general ledger account by company code and GL account number.

naftiko: "0.5"
info:
  label: "SAP General Ledger Balance Lookup"
  description: "Retrieves the current balance for a SAP general ledger account by company code and GL account number."
  tags:
    - finance
    - sap
    - banking
capability:
  exposes:
    - type: mcp
      namespace: erp-finance
      port: 8080
      tools:
        - name: get-gl-balance
          description: "Given a company code and GL account number, return the current balance and currency from SAP. Use for finance reconciliation."
          inputParameters:
            - name: company_code
              in: body
              type: string
              description: "The SAP company code (e.g., 1000)."
            - name: gl_account
              in: body
              type: string
              description: "The GL account number."
          call: "sap.get-gl-balance"
          with:
            company_code: "{{company_code}}"
            gl_account: "{{gl_account}}"
          outputParameters:
            - name: balance
              type: string
              mapping: "$.d.Balance"
            - name: currency
              type: string
              mapping: "$.d.Currency"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://wellsfargo-s4.sap.com/sap/opu/odata/sap/API_GLACCOUNTBALANCE"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: gl-balances
          path: "/A_GLAccountBalance(CompanyCode='{{company_code}}',GLAccount='{{gl_account}}')"
          inputParameters:
            - name: company_code
              in: path
            - name: gl_account
              in: path
          operations:
            - name: get-gl-balance
              method: GET

Posts intercompany journal entries in SAP, validates the posting via Snowflake balance check, and notifies the accounting team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "SAP Intercompany Journal Entry Poster"
  description: "Posts intercompany journal entries in SAP, validates the posting via Snowflake balance check, and notifies the accounting team via Microsoft Teams."
  tags:
    - finance
    - sap
    - snowflake
    - microsoft-teams
    - banking
capability:
  exposes:
    - type: mcp
      namespace: finance-ops
      port: 8080
      tools:
        - name: post-intercompany-je
          description: "Given debit and credit company codes and amount, post the entry in SAP, verify balances, and notify accounting. Use for month-end intercompany settlements."
          inputParameters:
            - name: debit_company
              in: body
              type: string
              description: "The debit company code."
            - name: credit_company
              in: body
              type: string
              description: "The credit company code."
            - name: amount
              in: body
              type: string
              description: "The journal entry amount."
          steps:
            - name: post-entry
              type: call
              call: "sap.post-journal"
              with:
                debit_company: "{{debit_company}}"
                credit_company: "{{credit_company}}"
                amount: "{{amount}}"
            - name: verify-balance
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT balance FROM FINANCE.IC_BALANCES WHERE company_code='{{debit_company}}'"
            - name: notify-accounting
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_accounting_channel"
                text: "Intercompany JE posted: {{debit_company}} -> {{credit_company}}, amount ${{amount}}. Doc: {{post-entry.document_number}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://wellsfargo-s4.sap.com/sap/opu/odata/sap/API_JOURNALENTRYITEMBASIC_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: journal-entries
          path: "/A_JournalEntryItemBasic"
          operations:
            - name: post-journal
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Executes SAP period-end close steps, validates balancing entries in Snowflake, and notifies the accounting team via Microsoft Teams with close status.

naftiko: "0.5"
info:
  label: "SAP Period-End Close Automation"
  description: "Executes SAP period-end close steps, validates balancing entries in Snowflake, and notifies the accounting team via Microsoft Teams with close status."
  tags:
    - finance
    - sap
    - snowflake
    - microsoft-teams
    - accounting
capability:
  exposes:
    - type: mcp
      namespace: sap_period_end_close
      port: 8080
      tools:
        - name: sap-period
          description: "Given an execution date, run the sap period-end close automation process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.SAP_PERIOD_END_CLOSE_AUTOMATION LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.SAP_PERIOD_END_CLOSE_AUTOMATION_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_sap_period_end_close_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a SAP purchase order by number and returns status, vendor, and total amount.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Detail Lookup"
  description: "Retrieves a SAP purchase order by number and returns status, vendor, and total amount."
  tags:
    - procurement
    - sap
    - banking
capability:
  exposes:
    - type: mcp
      namespace: erp-procurement
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Given a SAP purchase order number, return the PO status, vendor name, total amount, and currency. Use for procurement verification."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number (e.g., 4500012345)."
          call: "sap.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.OverallStatus"
            - name: vendor
              type: string
              mapping: "$.d.Supplier.CompanyName"
            - name: total_amount
              type: string
              mapping: "$.d.TotalAmount"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://wellsfargo-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{po_number}}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET

Retrieves a SAP vendor master record by vendor number and returns the name, payment terms, and city.

naftiko: "0.5"
info:
  label: "SAP Vendor Master Detail Lookup"
  description: "Retrieves a SAP vendor master record by vendor number and returns the name, payment terms, and city."
  tags:
    - procurement
    - sap
    - banking
capability:
  exposes:
    - type: mcp
      namespace: erp-vendor
      port: 8080
      tools:
        - name: get-vendor
          description: "Given a SAP vendor number, return the vendor name, payment terms, and city. Use for vendor due diligence and onboarding checks."
          inputParameters:
            - name: vendor_number
              in: body
              type: string
              description: "The SAP vendor number."
          call: "sap.get-vendor"
          with:
            vendor_number: "{{vendor_number}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.d.VendorName"
            - name: payment_terms
              type: string
              mapping: "$.d.PaymentTerms"
            - name: city
              type: string
              mapping: "$.d.City"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://wellsfargo-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: vendors
          path: "/A_Supplier('{{vendor_number}}')"
          inputParameters:
            - name: vendor_number
              in: path
          operations:
            - name: get-vendor
              method: GET

Retrieves vendor master data from SAP by vendor number, returning name, payment terms, and banking details.

naftiko: "0.5"
info:
  label: "SAP Vendor Master Lookup"
  description: "Retrieves vendor master data from SAP by vendor number, returning name, payment terms, and banking details."
  tags:
    - procurement
    - sap
    - vendor-management
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: get-vendor
          description: "Given a SAP vendor number, retrieve the vendor master record. Use for supplier verification."
          inputParameters:
            - name: vendor_number
              in: body
              type: string
              description: "The SAP vendor number."
          call: "sap.get-vendor"
          with:
            vendor_number: "{{vendor_number}}"
          outputParameters:
            - name: vendor_name
              type: string
              mapping: "$.d.SupplierName"
            - name: payment_terms
              type: string
              mapping: "$.d.PaymentTerms"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://wellsfargo-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: vendors
          path: "/A_Supplier('{{vendor_number}}')"
          inputParameters:
            - name: vendor_number
              in: path
          operations:
            - name: get-vendor
              method: GET

Submits a ServiceNow change request for a planned banking system change and notifies the change approver in Microsoft Teams when the CAB review is scheduled.

naftiko: "0.5"
info:
  label: "ServiceNow Change Request Approval Workflow"
  description: "Submits a ServiceNow change request for a planned banking system change and notifies the change approver in Microsoft Teams when the CAB review is scheduled."
  tags:
    - itsm
    - servicenow
    - microsoft-teams
    - change-management
    - approval
capability:
  exposes:
    - type: mcp
      namespace: change-mgmt
      port: 8080
      tools:
        - name: submit-system-change-request
          description: "Given change details and an approver UPN, submit a ServiceNow change request and notify the approver in Microsoft Teams. Use for planned changes to core banking, payments, and compliance systems."
          inputParameters:
            - name: short_description
              in: body
              type: string
              description: "Brief description of the planned change."
            - name: description
              in: body
              type: string
              description: "Detailed description including impact assessment and rollback plan."
            - name: scheduled_start
              in: body
              type: string
              description: "Scheduled start time in ISO 8601 format."
            - name: approver_upn
              in: body
              type: string
              description: "Microsoft UPN of the change approver."
          steps:
            - name: create-change-request
              type: call
              call: servicenow-chg.create-change
              with:
                short_description: "{{short_description}}"
                description: "{{description}}"
                start_date: "{{scheduled_start}}"
                type: normal
            - name: notify-approver
              type: call
              call: msteams-chg.send-message
              with:
                recipient_upn: "{{approver_upn}}"
                text: "Change request submitted for your approval: {{short_description}}. Change number: {{create-change-request.number}}. Scheduled: {{scheduled_start}}. Review in ServiceNow."
  consumes:
    - type: http
      namespace: servicenow-chg
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: changes
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST
    - type: http
      namespace: msteams-chg
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/users/{{upn}}/chats"
          inputParameters:
            - name: upn
              in: path
          operations:
            - name: send-message
              method: POST

Evaluates ServiceNow change requests against historical failure data in Snowflake, assigns a risk score, and notifies the CAB via Microsoft Teams.

naftiko: "0.5"
info:
  label: "ServiceNow Change Risk Assessor"
  description: "Evaluates ServiceNow change requests against historical failure data in Snowflake, assigns a risk score, and notifies the CAB via Microsoft Teams."
  tags:
    - itsm
    - servicenow
    - snowflake
    - microsoft-teams
    - change-management
capability:
  exposes:
    - type: mcp
      namespace: servicenow_change_ri
      port: 8080
      tools:
        - name: servicenow-change
          description: "Given an execution date, run the servicenow change risk assessor process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.SERVICENOW_CHANGE_RISK_ASSESSOR LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.SERVICENOW_CHANGE_RISK_ASSESSOR_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "itsm"
                short_description: "ServiceNow Change Risk Assessor processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_servicenow_change_ri_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Looks up a ServiceNow incident by number and returns priority, state, and assigned group.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Lookup"
  description: "Looks up a ServiceNow incident by number and returns priority, state, and assigned group."
  tags:
    - itsm
    - servicenow
    - banking
capability:
  exposes:
    - type: mcp
      namespace: itsm-lookup
      port: 8080
      tools:
        - name: get-incident-status
          description: "Given a ServiceNow incident number, return the incident state, priority, and assigned group. Use for IT support status checks."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number (e.g., INC0012345)."
          call: "servicenow.get-incident"
          with:
            number: "{{incident_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result.state"
            - name: priority
              type: string
              mapping: "$.result.priority"
            - name: assigned_to
              type: string
              mapping: "$.result.assignment_group.display_value"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident?number={{number}}"
          inputParameters:
            - name: number
              in: query
          operations:
            - name: get-incident
              method: GET

Retrieves the current status, priority, and assignment group for a ServiceNow incident by number.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Status Lookup"
  description: "Retrieves the current status, priority, and assignment group for a ServiceNow incident by number."
  tags:
    - itsm
    - servicenow
    - incident-management
capability:
  exposes:
    - type: mcp
      namespace: itsm
      port: 8080
      tools:
        - name: get-incident-status
          description: "Given a ServiceNow incident number, retrieve its current state and priority. Use for status checks."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number."
          call: "servicenow.get-incident"
          with:
            incident_number: "{{incident_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result.state"
            - name: priority
              type: string
              mapping: "$.result.priority"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident?sysparm_query=number={{incident_number}}"
          inputParameters:
            - name: incident_number
              in: query
          operations:
            - name: get-incident
              method: GET

When a ServiceNow P1 or P2 incident is created for a core banking system, creates a linked Jira issue in the engineering project and notifies the engineering on-call via Microsoft Teams.

naftiko: "0.5"
info:
  label: "ServiceNow ITSM Incident to Jira Sync"
  description: "When a ServiceNow P1 or P2 incident is created for a core banking system, creates a linked Jira issue in the engineering project and notifies the engineering on-call via Microsoft Teams."
  tags:
    - itsm
    - servicenow
    - jira
    - microsoft-teams
    - incident-response
capability:
  exposes:
    - type: mcp
      namespace: itsm-bridge
      port: 8080
      tools:
        - name: sync-incident-to-jira
          description: "Given a ServiceNow incident number and priority, create a linked Jira issue and notify the on-call engineering team in Microsoft Teams. Use for P1/P2 incidents affecting core banking applications."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "ServiceNow incident number (e.g. INC0001234)."
            - name: priority
              in: body
              type: string
              description: "Incident priority: P1 or P2."
            - name: affected_system
              in: body
              type: string
              description: "Name of the affected banking system."
          steps:
            - name: get-incident
              type: call
              call: servicenow.get-incident
              with:
                number: "{{incident_number}}"
            - name: create-jira-issue
              type: call
              call: jira-ops.create-issue
              with:
                project_key: OPS
                issuetype: Incident
                summary: "[{{priority}}] {{get-incident.short_description}}"
                description: "ServiceNow: {{incident_number}}\nSystem: {{affected_system}}\nDetails: {{get-incident.description}}"
            - name: notify-oncall
              type: call
              call: msteams-oncall.send-message
              with:
                channel_id: "$secrets.teams_oncall_channel_id"
                text: "{{priority}} Incident: {{get-incident.short_description}} | System: {{affected_system}} | ServiceNow: {{incident_number}} | Jira: {{create-jira-issue.key}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          inputParameters:
            - name: number
              in: query
          operations:
            - name: get-incident
              method: GET
    - type: http
      namespace: jira-ops
      baseUri: "https://wellsfargo.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams-oncall
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Executes a read-only SQL query against Snowflake and returns the result set for ad-hoc analytics.

naftiko: "0.5"
info:
  label: "Snowflake Ad-Hoc Query Executor"
  description: "Executes a read-only SQL query against Snowflake and returns the result set for ad-hoc analytics."
  tags:
    - data
    - snowflake
    - banking
capability:
  exposes:
    - type: mcp
      namespace: data-query
      port: 8080
      tools:
        - name: execute-query
          description: "Given a SQL statement, execute it against the Wells Fargo Snowflake warehouse and return the result set. Use for ad-hoc reporting queries."
          inputParameters:
            - name: sql_statement
              in: body
              type: string
              description: "The SQL SELECT statement to execute."
          call: "snowflake.execute-statement"
          with:
            statement: "{{sql_statement}}"
          outputParameters:
            - name: row_count
              type: integer
              mapping: "$.resultSetMetaData.numRows"
            - name: rows
              type: array
              mapping: "$.data"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST

Executes data quality checks on Snowflake AML transaction tables, logs results to a compliance audit table, and alerts the AML compliance team via Microsoft Teams if thresholds are breached.

naftiko: "0.5"
info:
  label: "Snowflake Anti-Money Laundering Data Quality Check"
  description: "Executes data quality checks on Snowflake AML transaction tables, logs results to a compliance audit table, and alerts the AML compliance team via Microsoft Teams if thresholds are breached."
  tags:
    - compliance
    - data
    - snowflake
    - microsoft-teams
    - aml
    - data-quality
capability:
  exposes:
    - type: mcp
      namespace: aml-data-quality
      port: 8080
      tools:
        - name: run-aml-data-quality-check
          description: "Given a Snowflake AML table name and as-of date, execute row count and null-check validations, log results, and alert the AML compliance Teams channel if any check fails. Use daily before AML transaction monitoring batch runs."
          inputParameters:
            - name: aml_table
              in: body
              type: string
              description: "Snowflake AML table to validate (e.g. COMPLIANCE.AML_TRANSACTIONS)."
            - name: as_of_date
              in: body
              type: string
              description: "Date partition to validate in YYYY-MM-DD format."
            - name: min_row_count
              in: body
              type: integer
              description: "Minimum expected row count for the given date partition."
          steps:
            - name: run-quality-checks
              type: call
              call: snowflake-aml.execute-statement
              with:
                statement: "SELECT COUNT(*) as row_count, SUM(CASE WHEN account_id IS NULL THEN 1 ELSE 0 END) as null_accounts FROM {{aml_table}} WHERE transaction_date = '{{as_of_date}}'"
            - name: notify-aml-team
              type: call
              call: msteams-aml.send-message
              with:
                channel_id: "$secrets.teams_aml_channel_id"
                text: "AML data quality check for {{aml_table}} on {{as_of_date}}: Row count={{run-quality-checks.row_count}} (min: {{min_row_count}}), Null accounts={{run-quality-checks.null_accounts}}. Status: {{run-quality-checks.status}}."
  consumes:
    - type: http
      namespace: snowflake-aml
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams-aml
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Queries Snowflake task history for failed ETL jobs supporting core banking and compliance data feeds, creates ServiceNow tickets for failures, and notifies the data engineering team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Snowflake Data Pipeline Health Monitor"
  description: "Queries Snowflake task history for failed ETL jobs supporting core banking and compliance data feeds, creates ServiceNow tickets for failures, and notifies the data engineering team via Microsoft Teams."
  tags:
    - data
    - snowflake
    - servicenow
    - microsoft-teams
    - monitoring
    - etl
capability:
  exposes:
    - type: mcp
      namespace: data-pipeline-health
      port: 8080
      tools:
        - name: monitor-etl-pipeline-health
          description: "Given a Snowflake schema and lookback window in hours, check for failed task runs, create a ServiceNow task for each failure, and post a health summary to the data-engineering Teams channel. Use for daily ETL health checks on banking data pipelines."
          inputParameters:
            - name: schema_name
              in: body
              type: string
              description: "Snowflake schema to check (e.g. BANKING.ETL_CORE)."
            - name: lookback_hours
              in: body
              type: integer
              description: "Hours of task history to inspect (e.g. 24)."
          steps:
            - name: check-task-failures
              type: call
              call: snowflake-etl.execute-statement
              with:
                statement: "SELECT name, state, error_message, scheduled_time FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY(SCHEDULED_TIME_RANGE_START=>DATEADD('hour', -{{lookback_hours}}, CURRENT_TIMESTAMP()))) WHERE STATE = 'FAILED'"
            - name: create-failure-ticket
              type: call
              call: servicenow-data.create-task
              with:
                category: data_pipeline
                short_description: "ETL failures in {{schema_name}} — last {{lookback_hours}}h"
                description: "Failed Snowflake tasks detected: {{check-task-failures.row_count}} failures\n{{check-task-failures.results}}"
            - name: notify-data-eng
              type: call
              call: msteams-dataeng.send-message
              with:
                channel_id: "$secrets.teams_dataeng_channel_id"
                text: "Pipeline health: {{schema_name}} — {{check-task-failures.row_count}} failures in last {{lookback_hours}}h. ServiceNow: {{create-failure-ticket.number}}."
  consumes:
    - type: http
      namespace: snowflake-etl
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: servicenow-data
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams-dataeng
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Runs data quality checks against Snowflake SLA definitions, logs results, creates ServiceNow incidents for violations, and alerts data stewards via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Snowflake Data Quality SLA Monitor"
  description: "Runs data quality checks against Snowflake SLA definitions, logs results, creates ServiceNow incidents for violations, and alerts data stewards via Microsoft Teams."
  tags:
    - data-quality
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: snowflake_data_quali
      port: 8080
      tools:
        - name: snowflake-data
          description: "Given an execution date, run the snowflake data quality sla monitor process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.SNOWFLAKE_DATA_QUALITY_SLA_MONITOR LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.SNOWFLAKE_DATA_QUALITY_SLA_MONITOR_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "data-quality"
                short_description: "Snowflake Data Quality SLA Monitor processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_snowflake_data_quali_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Checks the status of a Snowflake data share and returns consumer access details and last refresh time.

naftiko: "0.5"
info:
  label: "Snowflake Data Share Consumer Check"
  description: "Checks the status of a Snowflake data share and returns consumer access details and last refresh time."
  tags:
    - data
    - snowflake
    - data-sharing
capability:
  exposes:
    - type: mcp
      namespace: data-sharing
      port: 8080
      tools:
        - name: check-data-share
          description: "Given a Snowflake share name, check consumer access status and data freshness. Use for data partnership monitoring."
          inputParameters:
            - name: share_name
              in: body
              type: string
              description: "The Snowflake data share name."
          call: "snowflake.get-share"
          with:
            share_name: "{{share_name}}"
          outputParameters:
            - name: consumer_count
              type: integer
              mapping: "$.data.consumer_count"
            - name: last_refresh
              type: string
              mapping: "$.data.last_refresh_time"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: shares
          path: "/shares/{{share_name}}"
          inputParameters:
            - name: share_name
              in: path
          operations:
            - name: get-share
              method: GET

Executes a read-only SQL query against the Wells Fargo Snowflake data warehouse and returns results.

naftiko: "0.5"
info:
  label: "Snowflake Query Executor"
  description: "Executes a read-only SQL query against the Wells Fargo Snowflake data warehouse and returns results."
  tags:
    - data
    - snowflake
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: data
      port: 8080
      tools:
        - name: execute-query
          description: "Given a SQL statement, execute it against Snowflake and return results. Use for analytics and data validation."
          inputParameters:
            - name: sql_statement
              in: body
              type: string
              description: "The read-only SQL query to execute."
          call: "snowflake.execute-statement"
          with:
            statement: "{{sql_statement}}"
          outputParameters:
            - name: row_count
              type: integer
              mapping: "$.data.rowCount"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST

Executes a Snowflake query to produce a regulatory reporting dataset, validates row counts, and posts the validation summary to the compliance Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Snowflake Regulatory Reporting Data Product"
  description: "Executes a Snowflake query to produce a regulatory reporting dataset, validates row counts, and posts the validation summary to the compliance Microsoft Teams channel."
  tags:
    - compliance
    - data
    - snowflake
    - microsoft-teams
    - regulatory-reporting
capability:
  exposes:
    - type: mcp
      namespace: regulatory-reporting
      port: 8080
      tools:
        - name: run-regulatory-report
          description: "Given a report name and reporting date, execute the corresponding Snowflake regulatory query, validate output row counts against expected thresholds, and post a validation summary to the compliance Teams channel. Use for OCC, Fed, and CFPB reporting runs."
          inputParameters:
            - name: report_name
              in: body
              type: string
              description: "Regulatory report identifier (e.g. CALL_REPORT, HMDA, CCAR)."
            - name: as_of_date
              in: body
              type: string
              description: "Report as-of date in ISO 8601 format (YYYY-MM-DD)."
            - name: expected_min_rows
              in: body
              type: integer
              description: "Minimum expected row count for validation."
          steps:
            - name: execute-report-query
              type: call
              call: snowflake-reg.execute-statement
              with:
                statement: "CALL REGULATORY.RUN_REPORT('{{report_name}}', '{{as_of_date}}')"
            - name: notify-compliance
              type: call
              call: msteams-compliance.send-message
              with:
                channel_id: "$secrets.teams_compliance_channel_id"
                text: "Regulatory report {{report_name}} as of {{as_of_date}} completed. Row count: {{execute-report-query.row_count}} (min expected: {{expected_min_rows}}). Status: {{execute-report-query.status}}."
  consumes:
    - type: http
      namespace: snowflake-reg
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams-compliance
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Executes a Splunk search query and returns matching log events for a given time range.

naftiko: "0.5"
info:
  label: "Splunk Log Search"
  description: "Executes a Splunk search query and returns matching log events for a given time range."
  tags:
    - security
    - splunk
    - logging
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: search-logs
          description: "Given a Splunk search query and time range, execute the search and return events. Use for security investigations."
          inputParameters:
            - name: search_query
              in: body
              type: string
              description: "The Splunk SPL search query."
            - name: earliest_time
              in: body
              type: string
              description: "Search start time, e.g. '-24h'."
          call: "splunk.create-search"
          with:
            search: "{{search_query}}"
            earliest_time: "{{earliest_time}}"
          outputParameters:
            - name: result_count
              type: integer
              mapping: "$.entry.content.resultCount"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://wellsfargo-splunk.example.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: searches
          path: "/search/jobs"
          operations:
            - name: create-search
              method: POST

Runs a Splunk search query and returns matching log events for security and operations investigations.

naftiko: "0.5"
info:
  label: "Splunk Security Log Search"
  description: "Runs a Splunk search query and returns matching log events for security and operations investigations."
  tags:
    - security
    - splunk
    - banking
capability:
  exposes:
    - type: mcp
      namespace: siem-search
      port: 8080
      tools:
        - name: search-logs
          description: "Given a Splunk search query string, execute the search and return matching events. Use for incident investigation and audit log review."
          inputParameters:
            - name: search_query
              in: body
              type: string
              description: "The Splunk SPL search query."
          call: "splunk.create-search"
          with:
            search: "{{search_query}}"
          outputParameters:
            - name: event_count
              type: integer
              mapping: "$.entry[0].content.eventCount"
            - name: results
              type: array
              mapping: "$.entry[0].content.results"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://splunk.wellsfargo.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search-jobs
          path: "/search/jobs"
          operations:
            - name: create-search
              method: POST

When Splunk Enterprise Security generates a critical notable event, creates a ServiceNow P1 security incident and posts a triage summary to the SOC Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Splunk SIEM Alert to Incident Chain"
  description: "When Splunk Enterprise Security generates a critical notable event, creates a ServiceNow P1 security incident and posts a triage summary to the SOC Microsoft Teams channel."
  tags:
    - security
    - splunk
    - servicenow
    - microsoft-teams
    - secops
    - siem
capability:
  exposes:
    - type: mcp
      namespace: siem-ops
      port: 8080
      tools:
        - name: handle-siem-alert
          description: "Given a Splunk notable event ID, severity, and description, create a ServiceNow security incident and alert the SOC Teams channel. Invoke on critical or high Splunk ES notable events for financial system threats."
          inputParameters:
            - name: event_id
              in: body
              type: string
              description: "Splunk notable event ID from Enterprise Security."
            - name: severity
              in: body
              type: string
              description: "Event severity: critical, high, medium."
            - name: event_description
              in: body
              type: string
              description: "Human-readable description of the notable event."
            - name: affected_system
              in: body
              type: string
              description: "Name of the affected banking system or application."
          steps:
            - name: create-si-incident
              type: call
              call: servicenow-siem.create-incident
              with:
                category: security
                subcategory: siem_alert
                impact: "{{severity}}"
                short_description: "SIEM alert: {{event_description}} on {{affected_system}}"
                description: "Splunk event {{event_id}}: {{event_description}}. Affected: {{affected_system}}. Severity: {{severity}}."
            - name: alert-soc-team
              type: call
              call: msteams-siem.send-message
              with:
                channel_id: "$secrets.teams_soc_channel_id"
                text: "SIEM Incident: {{event_description}} | System: {{affected_system}} | Severity: {{severity}} | ServiceNow: {{create-si-incident.number}} | Splunk: {{event_id}}"
  consumes:
    - type: http
      namespace: servicenow-siem
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: security-incidents
          path: "/table/sn_si_incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams-siem
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Tests Splunk SIEM correlation rules against historical data in Snowflake, logs test results, and notifies the security engineering team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Splunk SIEM Correlation Rule Tester"
  description: "Tests Splunk SIEM correlation rules against historical data in Snowflake, logs test results, and notifies the security engineering team via Microsoft Teams."
  tags:
    - security
    - splunk
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: splunk_siem_correlat
      port: 8080
      tools:
        - name: splunk-siem
          description: "Given an execution date, run the splunk siem correlation rule tester process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.SPLUNK_SIEM_CORRELATION_RULE_TESTER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.SPLUNK_SIEM_CORRELATION_RULE_TESTER_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_splunk_siem_correlat_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: splunk
      baseUri: "https://wellsfargo-splunk.example.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: events
          path: "/receivers/simple"
          operations:
            - name: index-event
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Checks the health of a SQL Server database, returning size, active connections, and backup status.

naftiko: "0.5"
info:
  label: "SQL Server Database Health Check"
  description: "Checks the health of a SQL Server database, returning size, active connections, and backup status."
  tags:
    - database
    - sql-server
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: database
      port: 8080
      tools:
        - name: get-db-health
          description: "Given a SQL Server instance and database name, retrieve health metrics. Use for database monitoring."
          inputParameters:
            - name: instance
              in: body
              type: string
              description: "The SQL Server instance name."
            - name: database_name
              in: body
              type: string
              description: "The database name."
          call: "snowflake.execute-statement"
          with:
            statement: "SELECT * FROM DBA.SQLSERVER_HEALTH WHERE instance='{{instance}}' AND db_name='{{database_name}}'"
          outputParameters:
            - name: size_gb
              type: string
              mapping: "$.data.rows[0].size_gb"
            - name: backup_status
              type: string
              mapping: "$.data.rows[0].backup_status"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST

Sends a message to a Microsoft Teams channel for team notifications and alerts.

naftiko: "0.5"
info:
  label: "Microsoft Teams Channel Message Sender"
  description: "Sends a message to a Microsoft Teams channel for team notifications and alerts."
  tags:
    - communication
    - microsoft-teams
    - banking
capability:
  exposes:
    - type: mcp
      namespace: messaging
      port: 8080
      tools:
        - name: send-channel-message
          description: "Given a Teams channel ID and message text, post the message to the channel. Use for automated notifications."
          inputParameters:
            - name: channel_id
              in: body
              type: string
              description: "The Microsoft Teams channel ID."
            - name: message_text
              in: body
              type: string
              description: "The message body text to send."
          call: "msteams.send-message"
          with:
            channel_id: "{{channel_id}}"
            text: "{{message_text}}"
          outputParameters:
            - name: message_id
              type: string
              mapping: "$.id"
  consumes:
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Reconciles daily cash positions by pulling balances from SAP and Snowflake, flagging discrepancies in Jira, and alerting the treasury team.

naftiko: "0.5"
info:
  label: "Treasury Cash Position Reconciliation"
  description: "Reconciles daily cash positions by pulling balances from SAP and Snowflake, flagging discrepancies in Jira, and alerting the treasury team."
  tags:
    - treasury
    - sap
    - snowflake
    - jira
    - microsoft-teams
    - banking
capability:
  exposes:
    - type: mcp
      namespace: treasury-recon
      port: 8080
      tools:
        - name: reconcile-cash-positions
          description: "Given a valuation date and currency, pull SAP and Snowflake balances, compare them, and flag any discrepancies. Use for daily treasury reconciliation."
          inputParameters:
            - name: valuation_date
              in: body
              type: string
              description: "The valuation date in YYYY-MM-DD format."
            - name: currency
              in: body
              type: string
              description: "The currency code (e.g., USD, EUR)."
          steps:
            - name: get-sap-balance
              type: call
              call: "sap.get-gl-balance"
              with:
                company_code: "1000"
                gl_account: "100000"
            - name: get-snowflake-balance
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT balance FROM TREASURY.CASH_POSITIONS WHERE val_date='{{valuation_date}}' AND currency='{{currency}}'"
            - name: flag-discrepancy
              type: call
              call: "jira.create-issue"
              with:
                project: "TREAS"
                issue_type: "Task"
                summary: "Cash position discrepancy: {{currency}} on {{valuation_date}}"
            - name: notify-treasury
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_treasury_channel"
                text: "Cash recon for {{currency}} on {{valuation_date}}: SAP={{get-sap-balance.balance}}, Snowflake={{get-snowflake-balance.balance}}. Ticket: {{flag-discrepancy.key}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://wellsfargo-s4.sap.com/sap/opu/odata/sap/API_GLACCOUNTBALANCE"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: gl-balances
          path: "/A_GLAccountBalance(CompanyCode='{{company_code}}',GLAccount='{{gl_account}}')"
          inputParameters:
            - name: company_code
              in: path
            - name: gl_account
              in: path
          operations:
            - name: get-gl-balance
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://wellsfargo.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Reconciles daily cash positions across banking systems in Snowflake, flags discrepancies, and notifies the treasury team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Treasury Cash Position Reconciliation"
  description: "Reconciles daily cash positions across banking systems in Snowflake, flags discrepancies, and notifies the treasury team via Microsoft Teams."
  tags:
    - treasury
    - finance
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: treasury_cash_positi
      port: 8080
      tools:
        - name: treasury-cash
          description: "Given an execution date, run the treasury cash position reconciliation process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.TREASURY_CASH_POSITION_RECONCILIATION LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.TREASURY_CASH_POSITION_RECONCILIATION_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_treasury_cash_positi_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Performs a vendor risk assessment by pulling vendor data from SAP, running risk scoring in Snowflake, creating a Jira review ticket, and notifying procurement.

naftiko: "0.5"
info:
  label: "Vendor Risk Assessment Workflow"
  description: "Performs a vendor risk assessment by pulling vendor data from SAP, running risk scoring in Snowflake, creating a Jira review ticket, and notifying procurement."
  tags:
    - procurement
    - sap
    - snowflake
    - jira
    - microsoft-teams
    - banking
capability:
  exposes:
    - type: mcp
      namespace: vendor-risk
      port: 8080
      tools:
        - name: assess-vendor-risk
          description: "Given a SAP vendor number, pull vendor master data, compute risk score, open a Jira review ticket, and notify procurement. Use for annual vendor risk reviews."
          inputParameters:
            - name: vendor_number
              in: body
              type: string
              description: "The SAP vendor number."
          steps:
            - name: get-vendor
              type: call
              call: "sap.get-vendor"
              with:
                vendor_number: "{{vendor_number}}"
            - name: compute-risk
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "CALL PROCUREMENT.COMPUTE_VENDOR_RISK('{{vendor_number}}')"
            - name: create-review
              type: call
              call: "jira.create-issue"
              with:
                project: "VRISK"
                issue_type: "Task"
                summary: "Vendor risk review: {{get-vendor.name}} ({{vendor_number}}) - Score: {{compute-risk.risk_score}}"
            - name: notify-procurement
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_procurement_channel"
                text: "Vendor risk assessment complete for {{get-vendor.name}}: score {{compute-risk.risk_score}}. Review: {{create-review.key}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://wellsfargo-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: vendors
          path: "/A_Supplier('{{vendor_number}}')"
          inputParameters:
            - name: vendor_number
              in: path
          operations:
            - name: get-vendor
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://wellsfargo.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Pulls client portfolio performance from Snowflake, enriches with FactSet market data, and sends personalized review digests to relationship managers via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Wealth Management Client Review Digest"
  description: "Pulls client portfolio performance from Snowflake, enriches with FactSet market data, and sends personalized review digests to relationship managers via Microsoft Teams."
  tags:
    - wealth-management
    - snowflake
    - factset
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: wealth_management_cl
      port: 8080
      tools:
        - name: wealth-management
          description: "Given an execution date, run the wealth management client review digest process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.WEALTH_MANAGEMENT_CLIENT_REVIEW_DIGEST LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.WEALTH_MANAGEMENT_CLIENT_REVIEW_DIGEST_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_wealth_management_cl_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Detects portfolio drift by querying allocation data from Snowflake, comparing to target weights, and notifying advisors via Microsoft Teams with Salesforce case creation.

naftiko: "0.5"
info:
  label: "Wealth Management Portfolio Rebalance Alert"
  description: "Detects portfolio drift by querying allocation data from Snowflake, comparing to target weights, and notifying advisors via Microsoft Teams with Salesforce case creation."
  tags:
    - wealth-management
    - snowflake
    - salesforce
    - microsoft-teams
    - banking
capability:
  exposes:
    - type: mcp
      namespace: wm-ops
      port: 8080
      tools:
        - name: alert-rebalance
          description: "Given a portfolio ID and drift threshold, check current allocations, flag drifted positions, create an advisor action case, and send notification. Use for daily portfolio monitoring."
          inputParameters:
            - name: portfolio_id
              in: body
              type: string
              description: "The client portfolio identifier."
            - name: drift_threshold
              in: body
              type: string
              description: "The maximum allowed drift percentage (e.g., 5.0)."
          steps:
            - name: check-drift
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "CALL WM.CHECK_PORTFOLIO_DRIFT('{{portfolio_id}}', {{drift_threshold}})"
            - name: create-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "Rebalance needed: portfolio {{portfolio_id}}"
                description: "Drift detected: {{check-drift.max_drift}}% exceeds {{drift_threshold}}% threshold"
            - name: notify-advisor
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_wm_channel"
                text: "Portfolio {{portfolio_id}} rebalance alert: max drift {{check-drift.max_drift}}%. Case: {{create-case.id}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://wellsfargo.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a high-value wire transfer exceeds the threshold, pulls transaction details from Snowflake, creates a ServiceNow approval task, and escalates to the treasury team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Wire Transfer Approval Escalation"
  description: "When a high-value wire transfer exceeds the threshold, pulls transaction details from Snowflake, creates a ServiceNow approval task, and escalates to the treasury team via Microsoft Teams."
  tags:
    - treasury
    - snowflake
    - servicenow
    - microsoft-teams
    - banking
capability:
  exposes:
    - type: mcp
      namespace: treasury-ops
      port: 8080
      tools:
        - name: escalate-wire-transfer
          description: "Given a wire transfer ID and amount, verify the transaction, create an approval task, and notify treasury. Use for wire transfers above the auto-approval limit."
          inputParameters:
            - name: transfer_id
              in: body
              type: string
              description: "The wire transfer transaction ID."
            - name: amount
              in: body
              type: string
              description: "The transfer amount in USD."
          steps:
            - name: get-transfer
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM TREASURY.WIRE_TRANSFERS WHERE transfer_id='{{transfer_id}}'"
            - name: create-approval
              type: call
              call: "servicenow.create-incident"
              with:
                category: "wire_approval"
                short_description: "Wire transfer approval: {{transfer_id}} (${{amount}})"
            - name: notify-treasury
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_treasury_channel"
                text: "Wire transfer {{transfer_id}} for ${{amount}} requires approval. Task: {{create-approval.number}}. Beneficiary: {{get-transfer.beneficiary}}."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Screens international wire transfers against OFAC sanctions lists in Snowflake, flags matches in ServiceNow, and alerts the compliance team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Wire Transfer Sanctions Check"
  description: "Screens international wire transfers against OFAC sanctions lists in Snowflake, flags matches in ServiceNow, and alerts the compliance team via Microsoft Teams."
  tags:
    - compliance
    - sanctions
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: wire_transfer_sancti
      port: 8080
      tools:
        - name: wire-transfer
          description: "Given an execution date, run the wire transfer sanctions check process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.WIRE_TRANSFER_SANCTIONS_CHECK LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.WIRE_TRANSFER_SANCTIONS_CHECK_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "compliance"
                short_description: "Wire Transfer Sanctions Check processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_wire_transfer_sancti_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://wellsfargo.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Initiates the annual compensation review cycle by pulling current comp data from Snowflake, creating Jira tracking tasks, and notifying HR business partners via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Workday Annual Compensation Review Launcher"
  description: "Initiates the annual compensation review cycle by pulling current comp data from Snowflake, creating Jira tracking tasks, and notifying HR business partners via Microsoft Teams."
  tags:
    - hr
    - compensation
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: workday_annual_compe
      port: 8080
      tools:
        - name: workday-annual
          description: "Given an execution date, run the workday annual compensation review launcher process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.WORKDAY_ANNUAL_COMPENSATION_REVIEW_LAUNCHER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.WORKDAY_ANNUAL_COMPENSATION_REVIEW_LAUNCHER_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "WFOPS"
                issue_type: "Task"
                summary: "Workday Annual Compensation Review Launcher - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_workday_annual_compe_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://wellsfargo.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Identifies employees who have not completed benefits enrollment in Workday, logs status in Snowflake, and sends reminders via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Workday Benefits Open Enrollment Reminder"
  description: "Identifies employees who have not completed benefits enrollment in Workday, logs status in Snowflake, and sends reminders via Microsoft Teams."
  tags:
    - hr
    - benefits
    - workday
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: workday_benefits_ope
      port: 8080
      tools:
        - name: workday-benefits
          description: "Given an execution date, run the workday benefits open enrollment reminder process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.WORKDAY_BENEFITS_OPEN_ENROLLMENT_REMINDER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.WORKDAY_BENEFITS_OPEN_ENROLLMENT_REMINDER_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_workday_benefits_ope_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves compensation review proposals from Workday for a given cycle and notifies HR business partners via Microsoft Teams with a summary of merit increases pending approval.

naftiko: "0.5"
info:
  label: "Workday Compensation Review Notification"
  description: "Retrieves compensation review proposals from Workday for a given cycle and notifies HR business partners via Microsoft Teams with a summary of merit increases pending approval."
  tags:
    - hr
    - workday
    - microsoft-teams
    - compensation
    - approval
capability:
  exposes:
    - type: mcp
      namespace: compensation-review
      port: 8080
      tools:
        - name: notify-compensation-review
          description: "Given a Workday compensation review cycle ID, retrieve proposal counts and totals, and notify the HRBP team in Microsoft Teams. Use to kick off the annual compensation review approval workflow."
          inputParameters:
            - name: review_cycle_id
              in: body
              type: string
              description: "Workday compensation review cycle ID."
            - name: review_period_label
              in: body
              type: string
              description: "Human-readable review period (e.g. 2025 Annual Merit Increase)."
          steps:
            - name: get-review-summary
              type: call
              call: workday.get-comp-review
              with:
                cycle_id: "{{review_cycle_id}}"
            - name: notify-hrbp
              type: call
              call: msteams-hrbp.send-message
              with:
                channel_id: "$secrets.teams_hrbp_channel_id"
                text: "Compensation review {{review_period_label}} is open: {{get-review-summary.total_proposals}} proposals, total increase {{get-review-summary.total_amount}}. Please complete approvals in Workday by {{get-review-summary.deadline}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: comp-reviews
          path: "/wellsfargo/compensationReviewCycles/{{cycle_id}}"
          inputParameters:
            - name: cycle_id
              in: path
          operations:
            - name: get-comp-review
              method: GET
    - type: http
      namespace: msteams-hrbp
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Returns current headcount by department, cost center, and business line from Workday for finance and workforce planning reporting.

naftiko: "0.5"
info:
  label: "Workday Headcount and Cost Center Report"
  description: "Returns current headcount by department, cost center, and business line from Workday for finance and workforce planning reporting."
  tags:
    - hr
    - finance
    - workday
    - reporting
    - headcount
capability:
  exposes:
    - type: mcp
      namespace: hr-finance-reporting
      port: 8080
      tools:
        - name: get-headcount-report
          description: "Returns active employee headcount grouped by department, cost center, and business line from Workday. Use for workforce planning, regulatory staffing disclosures, and budget reviews."
          call: workday.get-headcount
          outputParameters:
            - name: workers
              type: array
              mapping: "$.data[*]"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: headcount
          path: "/wellsfargo/workers"
          operations:
            - name: get-headcount
              method: GET

Compares actual Workday headcount against forecast in Snowflake, flags variances, refreshes Power BI dashboards, and notifies HR leadership via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Workday Headcount Forecast Variance"
  description: "Compares actual Workday headcount against forecast in Snowflake, flags variances, refreshes Power BI dashboards, and notifies HR leadership via Microsoft Teams."
  tags:
    - hr
    - workforce-planning
    - workday
    - snowflake
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: workday_headcount_fo
      port: 8080
      tools:
        - name: workday-headcount
          description: "Given an execution date, run the workday headcount forecast variance process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.WORKDAY_HEADCOUNT_FORECAST_VARIANCE LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.WORKDAY_HEADCOUNT_FORECAST_VARIANCE_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_workday_headcount_fo_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Monitors Workday payroll tax filing status, logs compliance metrics in Snowflake, and alerts the payroll compliance team via Microsoft Teams when filings are overdue.

naftiko: "0.5"
info:
  label: "Workday Payroll Tax Filing Monitor"
  description: "Monitors Workday payroll tax filing status, logs compliance metrics in Snowflake, and alerts the payroll compliance team via Microsoft Teams when filings are overdue."
  tags:
    - hr
    - payroll
    - workday
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: workday_payroll_tax_
      port: 8080
      tools:
        - name: workday-payroll
          description: "Given an execution date, run the workday payroll tax filing monitor process. Use for scheduled operations."
          inputParameters:
            - name: execution_date
              in: body
              type: string
              description: "The execution date in YYYY-MM-DD format."
          steps:
            - name: get-data
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT * FROM ANALYTICS.WORKDAY_PAYROLL_TAX_FILING_MONITOR LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.WORKDAY_PAYROLL_TAX_FILING_MONITOR_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_workday_payroll_tax__channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://wellsfargo.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/teams/$secrets.teams_team_id/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Looks up a Workday worker profile by employee ID, returning name, title, department, and manager.

naftiko: "0.5"
info:
  label: "Workday Worker Profile Lookup"
  description: "Looks up a Workday worker profile by employee ID, returning name, title, department, and manager."
  tags:
    - hr
    - workday
    - employee-data
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-worker-profile
          description: "Given a Workday employee ID, retrieve the worker profile including job title and department. Use for HR inquiries."
          inputParameters:
            - name: worker_id
              in: body
              type: string
              description: "The Workday worker ID."
          call: "workday.get-worker"
          with:
            worker_id: "{{worker_id}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.worker.fullName"
            - name: job_title
              type: string
              mapping: "$.worker.jobTitle"
  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: "/wellsfargo/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET

Retrieves a Zendesk support ticket by ID, returning subject, status, requester, and priority.

naftiko: "0.5"
info:
  label: "Zendesk Ticket Lookup"
  description: "Retrieves a Zendesk support ticket by ID, returning subject, status, requester, and priority."
  tags:
    - support
    - zendesk
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: customer-support
      port: 8080
      tools:
        - name: get-ticket
          description: "Given a Zendesk ticket ID, retrieve ticket details including status and priority. Use for support escalations."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The Zendesk ticket ID."
          call: "zendesk.get-ticket"
          with:
            ticket_id: "{{ticket_id}}"
          outputParameters:
            - name: subject
              type: string
              mapping: "$.ticket.subject"
            - name: status
              type: string
              mapping: "$.ticket.status"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://wellsfargo.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets/{{ticket_id}}"
          inputParameters:
            - name: ticket_id
              in: path
          operations:
            - name: get-ticket
              method: GET