Nike Capabilities

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

Sort
Expand

Pulls Nike.com traffic metrics from Adobe Analytics into Snowflake, refreshes Power BI dashboards, and distributes daily digests via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Adobe Analytics Nike.com Traffic Digest"
  description: "Pulls Nike.com traffic metrics from Adobe Analytics into Snowflake, refreshes Power BI dashboards, and distributes daily digests via Microsoft Teams."
  tags:
    - analytics
    - adobe-analytics
    - snowflake
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: adobe_analytics_nike
      port: 8080
      tools:
        - name: adobe-analytics
          description: "Given an execution date, run the adobe analytics nike.com traffic 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.ADOBE_ANALYTICS_NIKE_COM_TRAFFIC_DIGEST LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.ADOBE_ANALYTICS_NIKE_COM_TRAFF_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_adobe_analytics_nike_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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

Pulls weekly product campaign performance metrics from Adobe Analytics and posts a digest to the digital marketing team's Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Adobe Analytics Product Campaign Digest"
  description: "Pulls weekly product campaign performance metrics from Adobe Analytics and posts a digest to the digital marketing team's Microsoft Teams channel."
  tags:
    - marketing
    - analytics
    - adobe-analytics
    - reporting
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: marketing-analytics
      port: 8080
      tools:
        - name: digest-campaign-analytics
          description: "Given an Adobe Analytics report suite ID and date range, fetch product campaign performance metrics and post a summary to the digital marketing Teams channel. Use for weekly campaign reviews."
          inputParameters:
            - name: report_suite_id
              in: body
              type: string
              description: "The Adobe Analytics report suite ID."
            - name: date_from
              in: body
              type: string
              description: "Report start date in YYYY-MM-DD format."
            - name: date_to
              in: body
              type: string
              description: "Report end date in YYYY-MM-DD format."
          steps:
            - name: get-metrics
              type: call
              call: "adobe-analytics.get-report"
              with:
                report_suite_id: "{{report_suite_id}}"
                date_from: "{{date_from}}"
                date_to: "{{date_to}}"
            - name: post-digest
              type: call
              call: "msteams-mkt.post-message"
              with:
                channel_id: "$secrets.digital_mkt_channel_id"
                text: "Campaign Analytics ({{date_from}}–{{date_to}}): Visits={{get-metrics.visits}}, Conversions={{get-metrics.conversions}}, Revenue={{get-metrics.revenue}}"
  consumes:
    - type: http
      namespace: adobe-analytics
      baseUri: "https://analytics.adobe.io/api/{{report_suite_id}}"
      authentication:
        type: bearer
        token: "$secrets.adobe_analytics_token"
      resources:
        - name: reports
          path: "/reports"
          inputParameters:
            - name: report_suite_id
              in: path
            - name: date_from
              in: query
            - name: date_to
              in: query
          operations:
            - name: get-report
              method: POST
    - type: http
      namespace: msteams-mkt
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Retrieves product catalog entries from Airtable.

naftiko: "0.5"
info:
  label: "Airtable Product Catalog Lookup"
  description: "Retrieves product catalog entries from Airtable."
  tags:
    - product-management
    - airtable
    - catalog
capability:
  exposes:
    - type: mcp
      namespace: product-catalog
      port: 8080
      tools:
        - name: get-record
          description: "Given an Airtable base and record ID, retrieve catalog entry. Use for product lookups."
          inputParameters:
            - name: base_id
              in: body
              type: string
              description: "The Airtable base ID."
            - name: record_id
              in: body
              type: string
              description: "The record ID."
          call: "airtable.get-record"
          with:
            base_id: "{{base_id}}"
            record_id: "{{record_id}}"
          outputParameters:
            - name: product_name
              type: string
              mapping: "$.fields.Name"
            - name: sku
              type: string
              mapping: "$.fields.SKU"
  consumes:
    - type: http
      namespace: airtable
      baseUri: "https://api.airtable.com/v0"
      authentication:
        type: bearer
        token: "$secrets.airtable_token"
      resources:
        - name: records
          path: "/{{base_id}}/Products/{{record_id}}"
          inputParameters:
            - name: base_id
              in: path
            - name: record_id
              in: path
          operations:
            - name: get-record
              method: GET

Tracks product sample status from Airtable, logs updates in Snowflake, creates Jira tasks for overdue samples, and notifies the product development team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Airtable Sample Tracking Workflow"
  description: "Tracks product sample status from Airtable, logs updates in Snowflake, creates Jira tasks for overdue samples, and notifies the product development team via Microsoft Teams."
  tags:
    - product-development
    - airtable
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: airtable_sample_trac
      port: 8080
      tools:
        - name: airtable-sample
          description: "Given an execution date, run the airtable sample tracking 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.AIRTABLE_SAMPLE_TRACKING_WORKFLOW LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.AIRTABLE_SAMPLE_TRACKING_WORKF_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "NKOPS"
                issue_type: "Task"
                summary: "Airtable Sample Tracking Workflow - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_airtable_sample_trac_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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

Generates product descriptions using the Anthropic API, stores in Snowflake, creates Jira review tasks, and notifies the content team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Anthropic Product Content Generator"
  description: "Generates product descriptions using the Anthropic API, stores in Snowflake, creates Jira review tasks, and notifies the content team via Microsoft Teams."
  tags:
    - ai
    - anthropic
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: anthropic_product_co
      port: 8080
      tools:
        - name: anthropic-product
          description: "Given an execution date, run the anthropic product content 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.ANTHROPIC_PRODUCT_CONTENT_GENERATOR LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.ANTHROPIC_PRODUCT_CONTENT_GENE_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "NKOPS"
                issue_type: "Task"
                summary: "Anthropic Product Content Generator - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_anthropic_product_co_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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

Submits product attributes to Anthropic Claude to generate SEO-optimized product descriptions, then updates the product record in Salesforce with the generated content.

naftiko: "0.5"
info:
  label: "Anthropic Product Description Generator"
  description: "Submits product attributes to Anthropic Claude to generate SEO-optimized product descriptions, then updates the product record in Salesforce with the generated content."
  tags:
    - ai
    - content
    - anthropic
    - salesforce
    - e-commerce
capability:
  exposes:
    - type: mcp
      namespace: ai-content
      port: 8080
      tools:
        - name: generate-product-description
          description: "Given a product ID, category, and key attributes, generate an SEO-optimized product description using Anthropic Claude and update the Salesforce product record. Use for bulk product catalog updates or new product launches."
          inputParameters:
            - name: product_id
              in: body
              type: string
              description: "The Salesforce product ID to update."
            - name: product_name
              in: body
              type: string
              description: "The product name."
            - name: attributes
              in: body
              type: string
              description: "Comma-separated product attributes (e.g., color, material, technology)."
            - name: category
              in: body
              type: string
              description: "Product category (e.g., Running Shoes, Training Apparel)."
          steps:
            - name: generate-description
              type: call
              call: "anthropic.create-message"
              with:
                model: "claude-3-5-sonnet-20241022"
                content: "Write a compelling 2-3 sentence SEO-optimized product description for a {{category}} named {{product_name}} with these attributes: {{attributes}}."
            - name: update-product
              type: call
              call: "salesforce-product.update-product"
              with:
                product_id: "{{product_id}}"
                description: "{{generate-description.text}}"
  consumes:
    - type: http
      namespace: anthropic
      baseUri: "https://api.anthropic.com/v1"
      authentication:
        type: apikey
        key: "x-api-key"
        value: "$secrets.anthropic_api_key"
        placement: header
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: create-message
              method: POST
    - type: http
      namespace: salesforce-product
      baseUri: "https://nike.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: products
          path: "/sobjects/Product2/{{product_id}}"
          inputParameters:
            - name: product_id
              in: path
          operations:
            - name: update-product
              method: PATCH

When an Apache Airflow DAG fails, logs error details in Snowflake, creates a ServiceNow incident, and alerts the data engineering team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Apache Airflow DAG Failure Handler"
  description: "When an Apache Airflow DAG fails, logs error details in Snowflake, creates a ServiceNow incident, and alerts the data engineering team via Microsoft Teams."
  tags:
    - data-engineering
    - apache-airflow
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: apache_airflow_dag_f
      port: 8080
      tools:
        - name: apache-airflow
          description: "Given an execution date, run the apache airflow dag 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.APACHE_AIRFLOW_DAG_FAILURE_HANDLER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.APACHE_AIRFLOW_DAG_FAILURE_HAN_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "data-engineering"
                short_description: "Apache Airflow DAG Failure Handler processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_apache_airflow_dag_f_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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 athlete endorsement contract milestones in Snowflake, flags upcoming renewals, creates Jira tasks, and notifies the sports marketing team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Athlete Endorsement Contract Tracker"
  description: "Monitors athlete endorsement contract milestones in Snowflake, flags upcoming renewals, creates Jira tasks, and notifies the sports marketing team via Microsoft Teams."
  tags:
    - marketing
    - contracts
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: athlete_endorsement_
      port: 8080
      tools:
        - name: athlete-endorsement
          description: "Given an execution date, run the athlete endorsement contract 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.ATHLETE_ENDORSEMENT_CONTRACT_TRACKER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.ATHLETE_ENDORSEMENT_CONTRACT_T_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "NKOPS"
                issue_type: "Task"
                summary: "Athlete Endorsement Contract Tracker - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_athlete_endorsement__channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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 AWS Cost Explorer detects a spending anomaly, creates a Jira FinOps review ticket and posts an alert to the cloud cost Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "AWS Cloud Cost Anomaly Alert"
  description: "When AWS Cost Explorer detects a spending anomaly, creates a Jira FinOps review ticket and posts an alert to the cloud cost Microsoft Teams channel."
  tags:
    - cloud
    - finops
    - aws
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: cloud-finops
      port: 8080
      tools:
        - name: handle-cost-anomaly
          description: "Given an AWS service name, anomaly ID, and estimated excess cost, create a Jira cost-review task and notify the FinOps Teams channel. Invoke when AWS Cost Anomaly Detection fires."
          inputParameters:
            - name: anomaly_id
              in: body
              type: string
              description: "The AWS Cost Explorer anomaly detection ID."
            - name: service_name
              in: body
              type: string
              description: "The AWS service name experiencing the anomaly."
            - name: excess_cost_usd
              in: body
              type: number
              description: "The estimated excess spend in USD."
          steps:
            - name: create-review-ticket
              type: call
              call: "jira-finops.create-issue"
              with:
                project_key: "FINOPS"
                issuetype: "Task"
                summary: "AWS cost anomaly: {{service_name}} — ${{excess_cost_usd}}"
                description: "Anomaly ID: {{anomaly_id}}\nEstimated excess: ${{excess_cost_usd}}"
            - name: alert-finops
              type: call
              call: "msteams-finops.post-message"
              with:
                channel_id: "$secrets.finops_channel_id"
                text: "Cost Anomaly: {{service_name}} | ${{excess_cost_usd}} excess | Jira: {{create-review-ticket.key}}"
  consumes:
    - type: http
      namespace: jira-finops
      baseUri: "https://nike.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-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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Monitors AWS Lambda function errors in Snowflake, creates ServiceNow incidents for recurring failures, and alerts the cloud engineering team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "AWS Lambda Function Error Handler"
  description: "Monitors AWS Lambda function errors in Snowflake, creates ServiceNow incidents for recurring failures, and alerts the cloud engineering team via Microsoft Teams."
  tags:
    - cloud
    - amazon-web-services
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: aws_lambda_function_
      port: 8080
      tools:
        - name: aws-lambda
          description: "Given an execution date, run the aws lambda function error 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.AWS_LAMBDA_FUNCTION_ERROR_HANDLER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.AWS_LAMBDA_FUNCTION_ERROR_HAND_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "cloud"
                short_description: "AWS Lambda Function Error Handler processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_aws_lambda_function__channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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 Axway API gateway traffic patterns in Snowflake, flags anomalies, creates ServiceNow incidents, and alerts the API platform team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Axway API Gateway Traffic Monitor"
  description: "Monitors Axway API gateway traffic patterns in Snowflake, flags anomalies, creates ServiceNow incidents, and alerts the API platform team via Microsoft Teams."
  tags:
    - api-management
    - axway
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: axway_api_gateway_tr
      port: 8080
      tools:
        - name: axway-api
          description: "Given an execution date, run the axway api gateway traffic 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.AXWAY_API_GATEWAY_TRAFFIC_MONITOR LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.AXWAY_API_GATEWAY_TRAFFIC_MONI_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "api-management"
                short_description: "Axway API Gateway Traffic Monitor processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_axway_api_gateway_tr_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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 Azure Data Factory pipelines in Snowflake, logs execution metrics, creates ServiceNow incidents for failures, and alerts the data team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Azure Data Factory Pipeline Monitor"
  description: "Monitors Azure Data Factory pipelines in Snowflake, logs execution metrics, creates ServiceNow incidents for failures, and alerts the data team via Microsoft Teams."
  tags:
    - data-engineering
    - azure-data-factory
    - snowflake
    - servicenow
    - 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_MO_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "data-engineering"
                short_description: "Azure Data Factory Pipeline Monitor processing complete"
            - 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://nike.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://nike.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 health status of a specified Azure resource.

naftiko: "0.5"
info:
  label: "Azure Resource Health Check"
  description: "Checks the health status of a specified Azure resource."
  tags:
    - cloud
    - microsoft-azure
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: cloud
      port: 8080
      tools:
        - name: get-resource-health
          description: "Given an Azure resource ID, check availability. Use for infrastructure monitoring."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "The Azure resource ID."
          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

Retrieves a Canva design by ID, returning title, status, and last edit time.

naftiko: "0.5"
info:
  label: "Canva Design Asset Lookup"
  description: "Retrieves a Canva design by ID, returning title, status, and last edit time."
  tags:
    - design
    - canva
    - creative
capability:
  exposes:
    - type: mcp
      namespace: creative
      port: 8080
      tools:
        - name: get-design
          description: "Given a Canva design ID, retrieve details. Use for creative asset management."
          inputParameters:
            - name: design_id
              in: body
              type: string
              description: "The Canva design ID."
          call: "canva.get-design"
          with:
            design_id: "{{design_id}}"
          outputParameters:
            - name: title
              type: string
              mapping: "$.design.title"
            - name: status
              type: string
              mapping: "$.design.status"
  consumes:
    - type: http
      namespace: canva
      baseUri: "https://api.canva.com/rest/v1"
      authentication:
        type: bearer
        token: "$secrets.canva_token"
      resources:
        - name: designs
          path: "/designs/{{design_id}}"
          inputParameters:
            - name: design_id
              in: path
          operations:
            - name: get-design
              method: GET

Retrieves a Confluence page by ID.

naftiko: "0.5"
info:
  label: "Confluence Page Lookup"
  description: "Retrieves a Confluence page by ID."
  tags:
    - documentation
    - confluence
    - knowledge-management
capability:
  exposes:
    - type: mcp
      namespace: knowledge
      port: 8080
      tools:
        - name: get-page
          description: "Given a Confluence page ID, retrieve details. 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"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://nike.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/content/{{page_id}}"
          inputParameters:
            - name: page_id
              in: path
          operations:
            - name: get-page
              method: GET

Routes Coupa procurement requests based on category rules in Snowflake, creates Jira approval tasks, and notifies the procurement team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Coupa Procurement Request Router"
  description: "Routes Coupa procurement requests based on category rules in Snowflake, creates Jira approval tasks, and notifies the procurement team via Microsoft Teams."
  tags:
    - procurement
    - coupa
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: coupa_procurement_re
      port: 8080
      tools:
        - name: coupa-procurement
          description: "Given an execution date, run the coupa procurement request router 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.COUPA_PROCUREMENT_REQUEST_ROUTER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.COUPA_PROCUREMENT_REQUEST_ROUT_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "NKOPS"
                issue_type: "Task"
                summary: "Coupa Procurement Request Router - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_coupa_procurement_re_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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

Runs product recommendation models in Databricks, stores predictions in Snowflake, and notifies the data science team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Databricks Product Recommendation Pipeline"
  description: "Runs product recommendation models in Databricks, stores predictions in Snowflake, and notifies the data science team via Microsoft Teams."
  tags:
    - data-science
    - databricks
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: databricks_product_r
      port: 8080
      tools:
        - name: databricks-product
          description: "Given an execution date, run the databricks product recommendation 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.DATABRICKS_PRODUCT_RECOMMENDATION_PIPELI LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.DATABRICKS_PRODUCT_RECOMMENDAT_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_databricks_product_r_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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

Queries Datadog for service health status.

naftiko: "0.5"
info:
  label: "Datadog Service Health Check"
  description: "Queries Datadog for service health status."
  tags:
    - monitoring
    - datadog
    - observability
capability:
  exposes:
    - type: mcp
      namespace: monitoring
      port: 8080
      tools:
        - name: get-service-health
          description: "Given a Datadog service name, retrieve health status. Use for operational 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

Fetches SLO compliance metrics from Datadog and posts a weekly service health report to the technology leadership Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Datadog SLO Compliance Weekly Report"
  description: "Fetches SLO compliance metrics from Datadog and posts a weekly service health report to the technology leadership Microsoft Teams channel."
  tags:
    - observability
    - slo
    - datadog
    - reporting
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: slo-reporting
      port: 8080
      tools:
        - name: publish-slo-report
          description: "Query Datadog for all SLO statuses and post a weekly compliance report to the technology leadership Teams channel. Use for weekly engineering reviews and executive technology briefings."
          steps:
            - name: get-slos
              type: call
              call: "datadog-slo.list-slos"
            - name: post-report
              type: call
              call: "msteams-slo.post-message"
              with:
                channel_id: "$secrets.tech_leadership_channel_id"
                text: "Weekly SLO Report: {{get-slos.count}} SLOs monitored. See Datadog for full compliance details."
  consumes:
    - type: http
      namespace: datadog-slo
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: slos
          path: "/slo"
          operations:
            - name: list-slos
              method: GET
    - type: http
      namespace: msteams-slo
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Scans Docker container images for vulnerabilities via Snowflake data, creates Jira remediation tickets, and alerts the security team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Docker Container Vulnerability Scanner"
  description: "Scans Docker container images for vulnerabilities via Snowflake data, creates Jira remediation tickets, and alerts the security team via Microsoft Teams."
  tags:
    - security
    - docker
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: docker_container_vul
      port: 8080
      tools:
        - name: docker-container
          description: "Given an execution date, run the docker container vulnerability scanner 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.DOCKER_CONTAINER_VULNERABILITY_SCANNER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.DOCKER_CONTAINER_VULNERABILITY_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "NKOPS"
                issue_type: "Task"
                summary: "Docker Container Vulnerability Scanner - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_docker_container_vul_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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

Tracks DocuSign contract execution status, logs in Snowflake, creates Jira follow-up tasks for unsigned contracts, and notifies the legal team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "DocuSign Contract Execution Tracker"
  description: "Tracks DocuSign contract execution status, logs in Snowflake, creates Jira follow-up tasks for unsigned contracts, and notifies the legal team via Microsoft Teams."
  tags:
    - legal
    - docusign
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: docusign_contract_ex
      port: 8080
      tools:
        - name: docusign-contract
          description: "Given an execution date, run the docusign contract execution 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.DOCUSIGN_CONTRACT_EXECUTION_TRACKER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.DOCUSIGN_CONTRACT_EXECUTION_TR_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "NKOPS"
                issue_type: "Task"
                summary: "DocuSign Contract Execution Tracker - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_docusign_contract_ex_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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 user session from DynamoDB for the Nike digital platform.

naftiko: "0.5"
info:
  label: "DynamoDB Session Lookup"
  description: "Retrieves a user session from DynamoDB for the Nike digital platform."
  tags:
    - data
    - dynamodb
    - e-commerce
capability:
  exposes:
    - type: mcp
      namespace: session-mgmt
      port: 8080
      tools:
        - name: get-session
          description: "Given a session ID, retrieve session data from DynamoDB. Use for customer experience investigations."
          inputParameters:
            - name: session_id
              in: body
              type: string
              description: "The session ID."
          call: "dynamodb.get-item"
          with:
            session_id: "{{session_id}}"
          outputParameters:
            - name: user_id
              type: string
              mapping: "$.Item.user_id.S"
            - name: platform
              type: string
              mapping: "$.Item.platform.S"
  consumes:
    - type: http
      namespace: dynamodb
      baseUri: "https://dynamodb.us-east-1.amazonaws.com"
      authentication:
        type: apikey
        key: "X-Amz-Security-Token"
        value: "$secrets.aws_session_token"
        placement: header
      resources:
        - name: items
          path: "/"
          operations:
            - name: get-item
              method: POST

Monitors nike.com checkout conversion rates in Snowflake, flags drops below threshold, creates ServiceNow incidents, and alerts the digital commerce team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "E-Commerce Checkout Conversion Monitor"
  description: "Monitors nike.com checkout conversion rates in Snowflake, flags drops below threshold, creates ServiceNow incidents, and alerts the digital commerce team via Microsoft Teams."
  tags:
    - e-commerce
    - analytics
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: ecommerce_checkout_c
      port: 8080
      tools:
        - name: ecommerce-checkout
          description: "Given an execution date, run the e-commerce checkout conversion 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.ECOMMERCE_CHECKOUT_CONVERSION_MONITOR LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.ECOMMERCE_CHECKOUT_CONVERSION__RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "e-commerce"
                short_description: "E-Commerce Checkout Conversion Monitor processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_ecommerce_checkout_c_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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 termination is confirmed in Workday, deactivates Okta access, disables the Microsoft 365 account, closes open ServiceNow tickets, and notifies the manager via Teams.

naftiko: "0.5"
info:
  label: "Employee Offboarding and Access Revocation"
  description: "When a termination is confirmed in Workday, deactivates Okta access, disables the Microsoft 365 account, closes open ServiceNow tickets, and notifies the manager via Teams."
  tags:
    - hr
    - offboarding
    - workday
    - okta
    - microsoft-365
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: hr-offboarding
      port: 8080
      tools:
        - name: trigger-offboarding
          description: "Given a Workday employee ID, deactivate their Okta account, disable Microsoft 365 access, and notify the manager in Teams. Invoke when HR confirms a termination in Workday."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID of the departing employee."
            - name: termination_date
              in: body
              type: string
              description: "The employee's last day in YYYY-MM-DD format."
          steps:
            - name: get-employee
              type: call
              call: "workday-off.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: deactivate-okta
              type: call
              call: "okta-off.deactivate-user"
              with:
                login: "{{get-employee.work_email}}"
            - name: disable-m365
              type: call
              call: "msgraph-off.disable-user"
              with:
                user_upn: "{{get-employee.work_email}}"
            - name: notify-manager
              type: call
              call: "msteams-off.send-message"
              with:
                recipient_upn: "{{get-employee.manager_email}}"
                text: "Offboarding complete for {{get-employee.full_name}} (last day: {{termination_date}}). All system access has been revoked."
  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: "/nike/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: okta-off
      baseUri: "https://nike.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: user-lifecycle
          path: "/users/{{login}}/lifecycle/deactivate"
          inputParameters:
            - name: login
              in: path
          operations:
            - name: deactivate-user
              method: POST
    - type: http
      namespace: msgraph-off
      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: disable-user
              method: PATCH
    - type: http
      namespace: msteams-off
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/chats"
          operations:
            - name: send-message
              method: POST

Validates Figma design files against Nike brand guidelines in Snowflake, flags non-compliant assets, creates Jira remediation tasks, and notifies the brand team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Figma Brand Asset Compliance Checker"
  description: "Validates Figma design files against Nike brand guidelines in Snowflake, flags non-compliant assets, creates Jira remediation tasks, and notifies the brand team via Microsoft Teams."
  tags:
    - design
    - figma
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: figma_brand_asset_co
      port: 8080
      tools:
        - name: figma-brand
          description: "Given an execution date, run the figma brand asset compliance checker 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_BRAND_ASSET_COMPLIANCE_CHECKER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.FIGMA_BRAND_ASSET_COMPLIANCE_C_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "NKOPS"
                issue_type: "Task"
                summary: "Figma Brand Asset Compliance Checker - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_figma_brand_asset_co_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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 Figma design file.

naftiko: "0.5"
info:
  label: "Figma Design File Lookup"
  description: "Retrieves metadata for a Figma design file."
  tags:
    - design
    - figma
    - creative
capability:
  exposes:
    - type: mcp
      namespace: design
      port: 8080
      tools:
        - name: get-design-file
          description: "Given a Figma file key, retrieve metadata. Use for design review workflows."
          inputParameters:
            - name: file_key
              in: body
              type: string
              description: "The Figma file key."
          call: "figma.get-file"
          with:
            file_key: "{{file_key}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.name"
            - name: last_modified
              type: string
              mapping: "$.lastModified"
  consumes:
    - type: http
      namespace: figma
      baseUri: "https://api.figma.com/v1"
      authentication:
        type: bearer
        token: "$secrets.figma_token"
      resources:
        - name: files
          path: "/files/{{file_key}}"
          inputParameters:
            - name: file_key
              in: path
          operations:
            - name: get-file
              method: GET

On a GitHub Actions workflow failure on a protected branch, opens a Jira bug, creates a Datadog deployment event, and alerts the engineering team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "GitHub CI/CD Pipeline Failure Response"
  description: "On a GitHub Actions workflow failure on a protected branch, opens a Jira bug, creates a Datadog deployment event, and alerts the engineering team in Microsoft Teams."
  tags:
    - devops
    - ci-cd
    - github
    - jira
    - datadog
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: devops-ci
      port: 8080
      tools:
        - name: handle-pipeline-failure
          description: "Given a GitHub Actions run ID, repository, branch, failing job, and commit SHA, open a Jira bug, create a Datadog deployment event, and alert the engineering Teams channel. Invoke on any protected-branch workflow failure."
          inputParameters:
            - name: run_id
              in: body
              type: string
              description: "The GitHub Actions workflow run ID."
            - name: repository
              in: body
              type: string
              description: "The GitHub repository in owner/repo format."
            - name: branch
              in: body
              type: string
              description: "The branch that failed."
            - name: job_name
              in: body
              type: string
              description: "The failed job name."
            - name: commit_sha
              in: body
              type: string
              description: "The commit SHA that triggered the run."
          steps:
            - name: create-bug
              type: call
              call: "jira.create-issue"
              with:
                project_key: "TECH"
                issuetype: "Bug"
                summary: "[CI Failure] {{repository}} / {{branch}} — {{job_name}}"
            - name: create-dd-event
              type: call
              call: "datadog-ci.create-event"
              with:
                title: "CI Failure: {{repository}} {{branch}}"
                alert_type: "error"
                tags: "repo:{{repository}},branch:{{branch}}"
            - name: alert-engineering
              type: call
              call: "msteams-ci.post-message"
              with:
                channel_id: "$secrets.engineering_channel_id"
                text: "Build Failure: {{repository}} | Branch: {{branch}} | Job: {{job_name}} | Jira: {{create-bug.key}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://nike.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: datadog-ci
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: msteams-ci
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Tracks GitHub Copilot usage and adoption metrics in Snowflake, computes productivity gains, and distributes reports to engineering leadership via Microsoft Teams.

naftiko: "0.5"
info:
  label: "GitHub Copilot Adoption Tracker"
  description: "Tracks GitHub Copilot usage and adoption metrics in Snowflake, computes productivity gains, and distributes reports to engineering leadership via Microsoft Teams."
  tags:
    - devops
    - github-copilot
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: github_copilot_adopt
      port: 8080
      tools:
        - name: github-copilot
          description: "Given an execution date, run the github copilot adoption 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.GITHUB_COPILOT_ADOPTION_TRACKER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.GITHUB_COPILOT_ADOPTION_TRACKE_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_github_copilot_adopt_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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 alerts, logs in Snowflake, creates Jira remediation tickets, and notifies the security engineering team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "GitHub Dependabot Alert Triage"
  description: "Processes GitHub Dependabot alerts, logs 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_al
      port: 8080
      tools:
        - name: github-dependabot
          description: "Given an execution date, run the github dependabot alert 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_ALERT_TRIAGE LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.GITHUB_DEPENDABOT_ALERT_TRIAGE_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "NKOPS"
                issue_type: "Task"
                summary: "GitHub Dependabot Alert Triage - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_github_dependabot_al_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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.

naftiko: "0.5"
info:
  label: "GitHub Repository Info Lookup"
  description: "Retrieves metadata for a GitHub repository."
  tags:
    - devops
    - github
    - source-control
capability:
  exposes:
    - type: mcp
      namespace: devops
      port: 8080
      tools:
        - name: get-repo-info
          description: "Given org and repo name, retrieve 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"
  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

Audits Google Tag Manager tags on Nike.com for compliance, logs in Snowflake, and notifies the web analytics team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Google Tag Manager Nike.com Audit"
  description: "Audits Google Tag Manager tags on Nike.com for compliance, logs in Snowflake, and notifies the web analytics team via Microsoft Teams."
  tags:
    - analytics
    - google-tag-manager
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: google_tag_manager_n
      port: 8080
      tools:
        - name: google-tag
          description: "Given an execution date, run the google tag manager nike.com 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.GOOGLE_TAG_MANAGER_NIKE_COM_AUDIT LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.GOOGLE_TAG_MANAGER_NIKE_COM_AU_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_google_tag_manager_n_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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 Jira issue by key.

naftiko: "0.5"
info:
  label: "Jira Issue Lookup"
  description: "Retrieves a Jira issue by key."
  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 details. Use for status updates."
          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://nike.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

Fetches the active sprint from Jira for a given project, summarizes open, in-progress, and done issues, and posts the report to the engineering team's Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Jira Sprint Status Report"
  description: "Fetches the active sprint from Jira for a given project, summarizes open, in-progress, and done issues, and posts the report to the engineering team's Microsoft Teams channel."
  tags:
    - devops
    - agile
    - jira
    - reporting
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: sprint-reporting
      port: 8080
      tools:
        - name: get-sprint-status
          description: "Given a Jira project key, fetch the active sprint and summarize issues by status, then post to the engineering Teams channel. Use for daily standups or weekly sprint reviews."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "The Jira project key (e.g., TECH, PLATFORM)."
          steps:
            - name: get-active-sprint
              type: call
              call: "jira-sprint.get-active-sprint"
              with:
                project_key: "{{project_key}}"
            - name: search-sprint-issues
              type: call
              call: "jira-sprint.search-issues"
              with:
                sprint_id: "{{get-active-sprint.sprint_id}}"
            - name: post-report
              type: call
              call: "msteams-sprint.post-message"
              with:
                channel_id: "$secrets.engineering_channel_id"
                text: "Sprint {{get-active-sprint.sprint_name}}: {{search-sprint-issues.todo_count}} To Do, {{search-sprint-issues.inprogress_count}} In Progress, {{search-sprint-issues.done_count}} Done."
  consumes:
    - type: http
      namespace: jira-sprint
      baseUri: "https://nike.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: sprints
          path: "/project/{{project_key}}/sprints"
          inputParameters:
            - name: project_key
              in: path
          operations:
            - name: get-active-sprint
              method: GET
        - name: issues
          path: "/search"
          operations:
            - name: search-issues
              method: POST
    - type: http
      namespace: msteams-sprint
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Computes Kubernetes cluster cost allocation from Snowflake metrics, generates chargeback reports, creates Jira budget tasks, and notifies the platform team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Kubernetes Cluster Cost Allocation Reporter"
  description: "Computes Kubernetes cluster cost allocation from Snowflake metrics, generates chargeback reports, creates Jira budget tasks, and notifies the platform team via Microsoft Teams."
  tags:
    - infrastructure
    - kubernetes
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: kubernetes_cluster_c
      port: 8080
      tools:
        - name: kubernetes-cluster
          description: "Given an execution date, run the kubernetes cluster cost allocation 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.KUBERNETES_CLUSTER_COST_ALLOCATION_REPOR LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.KUBERNETES_CLUSTER_COST_ALLOCA_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "NKOPS"
                issue_type: "Task"
                summary: "Kubernetes Cluster Cost Allocation Reporter - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_kubernetes_cluster_c_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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

Launches a new Marketo email campaign for a product line, updates the associated Salesforce campaign record with launch details, and posts confirmation to the marketing Teams channel.

naftiko: "0.5"
info:
  label: "Marketo Campaign Launch Orchestrator"
  description: "Launches a new Marketo email campaign for a product line, updates the associated Salesforce campaign record with launch details, and posts confirmation to the marketing Teams channel."
  tags:
    - marketing
    - marketo
    - salesforce
    - campaign-management
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: campaign-ops
      port: 8080
      tools:
        - name: launch-marketo-campaign
          description: "Given a Marketo program ID, Salesforce campaign ID, and launch datetime, activate the Marketo program, update the Salesforce campaign to Active, and notify the marketing team in Teams. Use for product launch and promotional email campaigns."
          inputParameters:
            - name: marketo_program_id
              in: body
              type: string
              description: "The Marketo program ID to activate."
            - name: salesforce_campaign_id
              in: body
              type: string
              description: "The Salesforce campaign ID to sync launch status."
            - name: launch_datetime
              in: body
              type: string
              description: "The scheduled launch datetime in ISO 8601 format."
          steps:
            - name: activate-program
              type: call
              call: "marketo.activate-program"
              with:
                program_id: "{{marketo_program_id}}"
            - name: update-sf-campaign
              type: call
              call: "salesforce-camp.update-campaign"
              with:
                campaign_id: "{{salesforce_campaign_id}}"
                status: "Active"
                start_date: "{{launch_datetime}}"
            - name: notify-marketing
              type: call
              call: "msteams-camp.post-message"
              with:
                channel_id: "$secrets.marketing_channel_id"
                text: "Campaign launched: Marketo program {{marketo_program_id}} activated for {{launch_datetime}}. Salesforce campaign {{salesforce_campaign_id}} updated."
  consumes:
    - type: http
      namespace: marketo
      baseUri: "https://nike.mktorest.com/rest/v1"
      authentication:
        type: bearer
        token: "$secrets.marketo_token"
      resources:
        - name: programs
          path: "/programs/{{program_id}}/approve.json"
          inputParameters:
            - name: program_id
              in: path
          operations:
            - name: activate-program
              method: POST
    - type: http
      namespace: salesforce-camp
      baseUri: "https://nike.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: campaigns
          path: "/sobjects/Campaign/{{campaign_id}}"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: update-campaign
              method: PATCH
    - type: http
      namespace: msteams-camp
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Syncs Marketo campaign performance metrics to Snowflake, computes engagement scores, and distributes insights to the marketing team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Marketo Campaign Performance Sync"
  description: "Syncs Marketo campaign performance metrics to Snowflake, computes engagement scores, and distributes insights to the marketing team via Microsoft Teams."
  tags:
    - marketing
    - marketo
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: marketo_campaign_per
      port: 8080
      tools:
        - name: marketo-campaign
          description: "Given an execution date, run the marketo campaign performance 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.MARKETO_CAMPAIGN_PERFORMANCE_SYNC LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.MARKETO_CAMPAIGN_PERFORMANCE_S_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_marketo_campaign_per_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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 Microsoft Sentinel security alerts, logs in Snowflake, creates ServiceNow incidents, and alerts the SOC team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Microsoft Sentinel Security Alert Handler"
  description: "Processes Microsoft Sentinel security alerts, logs in Snowflake, creates ServiceNow incidents, and alerts the SOC team via Microsoft Teams."
  tags:
    - security
    - microsoft-sentinel
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: microsoft_sentinel_s
      port: 8080
      tools:
        - name: microsoft-sentinel
          description: "Given an execution date, run the microsoft sentinel security 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.MICROSOFT_SENTINEL_SECURITY_ALERT_HANDLE LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.MICROSOFT_SENTINEL_SECURITY_AL_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "security"
                short_description: "Microsoft Sentinel Security Alert Handler processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_microsoft_sentinel_s_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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

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 team ID, channel ID, and message, post to the channel. Use for notifications."
          inputParameters:
            - name: team_id
              in: body
              type: string
              description: "The Teams team ID."
            - name: channel_id
              in: body
              type: string
              description: "The 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

Monitors MuleSoft API integration health in Snowflake, creates ServiceNow incidents for failing integrations, and alerts the integration team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "MuleSoft Integration Health Monitor"
  description: "Monitors MuleSoft API integration health in Snowflake, creates ServiceNow incidents for failing integrations, and alerts the integration team via Microsoft Teams."
  tags:
    - integration
    - mulesoft
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: mulesoft_integration
      port: 8080
      tools:
        - name: mulesoft-integration
          description: "Given an execution date, run the mulesoft integration 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.MULESOFT_INTEGRATION_HEALTH_MONITOR LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.MULESOFT_INTEGRATION_HEALTH_MO_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "integration"
                short_description: "MuleSoft Integration Health Monitor processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_mulesoft_integration_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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 Nike app user engagement metrics in Snowflake, identifies churn risks, and distributes insights to the digital team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Nike App User Engagement Analyzer"
  description: "Analyzes Nike app user engagement metrics in Snowflake, identifies churn risks, and distributes insights to the digital team via Microsoft Teams."
  tags:
    - analytics
    - mobile
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nike_app_user_engage
      port: 8080
      tools:
        - name: nike-app
          description: "Given an execution date, run the nike app user engagement 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.NIKE_APP_USER_ENGAGEMENT_ANALYZER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.NIKE_APP_USER_ENGAGEMENT_ANALY_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_nike_app_user_engage_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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 Nike Direct inventory levels in Snowflake, triggers replenishment orders in SAP when below thresholds, and notifies the planning team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Nike Direct Inventory Replenishment Trigger"
  description: "Monitors Nike Direct inventory levels in Snowflake, triggers replenishment orders in SAP when below thresholds, and notifies the planning team via Microsoft Teams."
  tags:
    - supply-chain
    - sap
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: nike_direct_inventor
      port: 8080
      tools:
        - name: nike-direct
          description: "Given an execution date, run the nike direct inventory replenishment trigger 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.NIKE_DIRECT_INVENTORY_REPLENISHMENT_TRIG LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.NIKE_DIRECT_INVENTORY_REPLENIS_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_nike_direct_inventor_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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

Syncs product roadmap items from Notion to Jira epics, logs in Snowflake, and notifies the product management team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Notion Product Roadmap Sync"
  description: "Syncs product roadmap items from Notion to Jira epics, logs in Snowflake, and notifies the product management team via Microsoft Teams."
  tags:
    - product-management
    - notion
    - jira
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: notion_product_roadm
      port: 8080
      tools:
        - name: notion-product
          description: "Given an execution date, run the notion product roadmap 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.NOTION_PRODUCT_ROADMAP_SYNC LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.NOTION_PRODUCT_ROADMAP_SYNC_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "NKOPS"
                issue_type: "Task"
                summary: "Notion Product Roadmap Sync - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_notion_product_roadm_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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

Lists all active Okta users assigned to a specified application group and cross-references with Workday to identify stale or orphaned accounts for quarterly access reviews.

naftiko: "0.5"
info:
  label: "Okta Access Review and Compliance Audit"
  description: "Lists all active Okta users assigned to a specified application group and cross-references with Workday to identify stale or orphaned accounts for quarterly access reviews."
  tags:
    - identity
    - security
    - okta
    - workday
    - access-review
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: identity-review
      port: 8080
      tools:
        - name: run-access-review
          description: "Given an Okta group ID and app name, list all group members and compare against active Workday workers to identify orphaned accounts. Generates a compliance report for quarterly reviews."
          inputParameters:
            - name: group_id
              in: body
              type: string
              description: "The Okta group ID to audit."
            - name: app_name
              in: body
              type: string
              description: "Application name for audit context."
          steps:
            - name: get-group-members
              type: call
              call: "okta-audit.get-group-members"
              with:
                group_id: "{{group_id}}"
            - name: get-active-workers
              type: call
              call: "workday-audit.list-workers"
  consumes:
    - type: http
      namespace: okta-audit
      baseUri: "https://nike.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: group-members
          path: "/groups/{{group_id}}/users"
          inputParameters:
            - name: group_id
              in: path
          operations:
            - name: get-group-members
              method: GET
    - type: http
      namespace: workday-audit
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: active-workers
          path: "/nike/workers"
          operations:
            - name: list-workers
              method: GET

Looks up an Okta user by login email.

naftiko: "0.5"
info:
  label: "Okta User Lookup"
  description: "Looks up an Okta user by login email."
  tags:
    - identity
    - okta
    - access-management
capability:
  exposes:
    - type: mcp
      namespace: identity
      port: 8080
      tools:
        - name: get-user
          description: "Given an Okta user login, retrieve profile details. Use for identity verification."
          inputParameters:
            - name: user_login
              in: body
              type: string
              description: "The Okta user login email."
          call: "okta.get-user"
          with:
            user_login: "{{user_login}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://nike.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: users
          path: "/users/{{user_login}}"
          inputParameters:
            - name: user_login
              in: path
          operations:
            - name: get-user
              method: GET

Monitors Ollama-powered internal AI assistant usage and performance in Snowflake, tracks adoption trends, and distributes reports to IT leadership via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Ollama Internal AI Assistant Monitor"
  description: "Monitors Ollama-powered internal AI assistant usage and performance in Snowflake, tracks adoption trends, and distributes reports to IT leadership via Microsoft Teams."
  tags:
    - ai
    - ollama
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: ollama_internal_ai_a
      port: 8080
      tools:
        - name: ollama-internal
          description: "Given an execution date, run the ollama internal ai assistant 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.OLLAMA_INTERNAL_AI_ASSISTANT_MONITOR LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.OLLAMA_INTERNAL_AI_ASSISTANT_M_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_ollama_internal_ai_a_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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

During open enrollment, pulls active employees from Workday and syncs benefit elections to ADP, then confirms enrollment via a Teams notification to each employee.

naftiko: "0.5"
info:
  label: "Open Enrollment Benefits Sync"
  description: "During open enrollment, pulls active employees from Workday and syncs benefit elections to ADP, then confirms enrollment via a Teams notification to each employee."
  tags:
    - hr
    - benefits
    - open-enrollment
    - workday
    - adp
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-benefits
      port: 8080
      tools:
        - name: sync-benefit-elections
          description: "Given an employee ID and benefit plan selection, sync the election from Workday to ADP and send a Teams confirmation. Use during open enrollment or qualifying life events."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID of the enrolling employee."
            - name: benefit_plan_id
              in: body
              type: string
              description: "The ADP benefit plan ID the employee selected."
          steps:
            - name: get-employee
              type: call
              call: "workday-ben.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: submit-election
              type: call
              call: "adp.update-benefit-election"
              with:
                associate_oid: "{{get-employee.adp_oid}}"
                plan_id: "{{benefit_plan_id}}"
            - name: confirm-enrollment
              type: call
              call: "msteams-ben.send-message"
              with:
                recipient_upn: "{{get-employee.work_email}}"
                text: "Your benefit election for plan {{benefit_plan_id}} has been successfully submitted."
  consumes:
    - type: http
      namespace: workday-ben
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/nike/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com"
      authentication:
        type: bearer
        token: "$secrets.adp_token"
      resources:
        - name: benefit-elections
          path: "/benefits/v2/workers/{{associate_oid}}/benefit-elections"
          inputParameters:
            - name: associate_oid
              in: path
          operations:
            - name: update-benefit-election
              method: POST
    - type: http
      namespace: msteams-ben
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/chats"
          operations:
            - name: send-message
              method: POST

Analyzes Paradox recruiting chatbot engagement metrics in Snowflake, identifies conversion bottlenecks, and notifies the talent acquisition team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Paradox Recruiting Chatbot Analytics"
  description: "Analyzes Paradox recruiting chatbot engagement metrics in Snowflake, identifies conversion bottlenecks, and notifies the talent acquisition team via Microsoft Teams."
  tags:
    - hr
    - recruiting
    - paradox
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: paradox_recruiting_c
      port: 8080
      tools:
        - name: paradox-recruiting
          description: "Given an execution date, run the paradox recruiting chatbot analytics 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.PARADOX_RECRUITING_CHATBOT_ANALYTICS LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.PARADOX_RECRUITING_CHATBOT_ANA_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_paradox_recruiting_c_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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

Checks the last refresh status for a Power BI dataset.

naftiko: "0.5"
info:
  label: "Power BI Dataset Refresh Status"
  description: "Checks the last refresh status for a Power BI dataset."
  tags:
    - analytics
    - power-bi
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: get-refresh-status
          description: "Given a Power BI dataset ID, check refresh status. Use for dashboard monitoring."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "The Power BI dataset ID."
          call: "powerbi.get-refresh"
          with:
            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: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: get-refresh
              method: GET

Triggers a Power BI dataset refresh after the Snowflake sales data load completes and notifies the sales analytics team in Teams upon success or failure.

naftiko: "0.5"
info:
  label: "Power BI Sales Dashboard Refresh"
  description: "Triggers a Power BI dataset refresh after the Snowflake sales data load completes and notifies the sales analytics team in Teams upon success or failure."
  tags:
    - data
    - analytics
    - power-bi
    - snowflake
    - reporting
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: bi-reporting
      port: 8080
      tools:
        - name: refresh-sales-dashboard
          description: "Given a Power BI workspace ID and dataset ID, trigger a dataset refresh and post the status to the sales analytics Teams channel. Use after Snowflake sales data loads complete."
          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 to refresh."
          steps:
            - name: refresh-dataset
              type: call
              call: "powerbi.trigger-refresh"
              with:
                workspace_id: "{{workspace_id}}"
                dataset_id: "{{dataset_id}}"
            - name: notify-team
              type: call
              call: "msteams-bi.post-message"
              with:
                channel_id: "$secrets.sales_analytics_channel_id"
                text: "Power BI dataset {{dataset_id}} refresh triggered."
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: dataset-refreshes
          path: "/groups/{{workspace_id}}/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: workspace_id
              in: path
            - name: dataset_id
              in: path
          operations:
            - name: trigger-refresh
              method: POST
    - type: http
      namespace: msteams-bi
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

When a Figma design is approved, creates Jira development stories, links design assets, and notifies the engineering team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Product Design to Development Handoff"
  description: "When a Figma design is approved, creates Jira development stories, links design assets, and notifies the engineering team via Microsoft Teams."
  tags:
    - design
    - figma
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: product_design_to_de
      port: 8080
      tools:
        - name: product-design
          description: "Given an execution date, run the product design to development handoff 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.PRODUCT_DESIGN_TO_DEVELOPMENT_HANDOFF LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.PRODUCT_DESIGN_TO_DEVELOPMENT__RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "NKOPS"
                issue_type: "Task"
                summary: "Product Design to Development Handoff - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_product_design_to_de_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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 retail store traffic data in Snowflake, computes conversion rates, and distributes insights to store operations via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Retail Store Traffic Analytics Pipeline"
  description: "Analyzes retail store traffic data in Snowflake, computes conversion rates, and distributes insights to store operations via Microsoft Teams."
  tags:
    - retail
    - analytics
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: retail_store_traffic
      port: 8080
      tools:
        - name: retail-store
          description: "Given an execution date, run the retail store traffic analytics 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.RETAIL_STORE_TRAFFIC_ANALYTICS_PIPELINE LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.RETAIL_STORE_TRAFFIC_ANALYTICS_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_retail_store_traffic_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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

Initiates SailPoint access review campaigns, logs certification status in Snowflake, creates ServiceNow follow-up tasks, and notifies the IAM team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "SailPoint Access Review Campaign"
  description: "Initiates SailPoint access review campaigns, logs certification status in Snowflake, creates ServiceNow follow-up tasks, and notifies the IAM team via Microsoft Teams."
  tags:
    - security
    - sailpoint
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: sailpoint_access_rev
      port: 8080
      tools:
        - name: sailpoint-access
          description: "Given an execution date, run the sailpoint access review campaign 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.SAILPOINT_ACCESS_REVIEW_CAMPAIGN LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.SAILPOINT_ACCESS_REVIEW_CAMPAI_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "security"
                short_description: "SailPoint Access Review Campaign processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_sailpoint_access_rev_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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 Salesforce opportunity is marked Closed-Won, creates a SAP sales order, provisions a customer account in ServiceNow, and sends a welcome email from Salesforce Marketing Cloud.

naftiko: "0.5"
info:
  label: "Salesforce Customer Onboarding Orchestrator"
  description: "When a Salesforce opportunity is marked Closed-Won, creates a SAP sales order, provisions a customer account in ServiceNow, and sends a welcome email from Salesforce Marketing Cloud."
  tags:
    - sales
    - crm
    - customer-onboarding
    - salesforce
    - sap
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: customer-onboarding
      port: 8080
      tools:
        - name: onboard-new-customer
          description: "Given a Salesforce opportunity ID, create a SAP sales order, open a ServiceNow customer account record, and trigger a welcome email via Salesforce Marketing Cloud. Invoke when a B2B opportunity moves to Closed-Won."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The Salesforce opportunity ID (18-character)."
          steps:
            - name: get-opportunity
              type: call
              call: "salesforce.get-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
            - name: create-sap-order
              type: call
              call: "sap-sales.create-sales-order"
              with:
                customer_id: "{{get-opportunity.account_sap_id}}"
                amount: "{{get-opportunity.amount}}"
            - name: create-snow-account
              type: call
              call: "servicenow-acct.create-record"
              with:
                account_name: "{{get-opportunity.account_name}}"
                sap_order_id: "{{create-sap-order.order_id}}"
            - name: send-welcome-email
              type: call
              call: "sfmc.trigger-email"
              with:
                email: "{{get-opportunity.contact_email}}"
                template_id: "welcome_customer"
                account_name: "{{get-opportunity.account_name}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://nike.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: sap-sales
      baseUri: "https://nike-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: sales-orders
          path: "/A_SalesOrder"
          operations:
            - name: create-sales-order
              method: POST
    - type: http
      namespace: servicenow-acct
      baseUri: "https://nike.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: accounts
          path: "/table/customer_account"
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: sfmc
      baseUri: "https://api.salesforce.com/marketing/v1"
      authentication:
        type: bearer
        token: "$secrets.sfmc_token"
      resources:
        - name: email-triggers
          path: "/messaging/v1/email/messages"
          operations:
            - name: trigger-email
              method: POST

When a new lead is created in Salesforce, enriches it with company firmographics from ZoomInfo and updates the lead record with employee count, revenue, and industry data.

naftiko: "0.5"
info:
  label: "Salesforce Lead Enrichment via ZoomInfo"
  description: "When a new lead is created in Salesforce, enriches it with company firmographics from ZoomInfo and updates the lead record with employee count, revenue, and industry data."
  tags:
    - sales
    - crm
    - lead-management
    - salesforce
    - zoominfo
capability:
  exposes:
    - type: mcp
      namespace: crm-enrichment
      port: 8080
      tools:
        - name: enrich-salesforce-lead
          description: "Given a Salesforce lead ID, fetch firmographic data from ZoomInfo and update the lead with company size, industry, and revenue. Use when a new lead is created or when lead data is incomplete."
          inputParameters:
            - name: lead_id
              in: body
              type: string
              description: "The Salesforce lead ID to enrich."
          steps:
            - name: get-lead
              type: call
              call: "salesforce-lead.get-lead"
              with:
                lead_id: "{{lead_id}}"
            - name: enrich-data
              type: call
              call: "zoominfo.search-company"
              with:
                company_name: "{{get-lead.company}}"
                email: "{{get-lead.email}}"
            - name: update-lead
              type: call
              call: "salesforce-lead-update.update-lead"
              with:
                lead_id: "{{lead_id}}"
                employees: "{{enrich-data.employee_count}}"
                annual_revenue: "{{enrich-data.revenue}}"
                industry: "{{enrich-data.industry}}"
  consumes:
    - type: http
      namespace: salesforce-lead
      baseUri: "https://nike.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: leads
          path: "/sobjects/Lead/{{lead_id}}"
          inputParameters:
            - name: lead_id
              in: path
          operations:
            - name: get-lead
              method: GET
    - type: http
      namespace: zoominfo
      baseUri: "https://api.zoominfo.com/search"
      authentication:
        type: bearer
        token: "$secrets.zoominfo_token"
      resources:
        - name: company-search
          path: "/company"
          operations:
            - name: search-company
              method: POST
    - type: http
      namespace: salesforce-lead-update
      baseUri: "https://nike.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: leads
          path: "/sobjects/Lead/{{lead_id}}"
          inputParameters:
            - name: lead_id
              in: path
          operations:
            - name: update-lead
              method: PATCH

Retrieves a Salesforce retail account by ID.

naftiko: "0.5"
info:
  label: "Salesforce Retail Account Lookup"
  description: "Retrieves a Salesforce retail account by ID."
  tags:
    - sales
    - salesforce
    - retail
capability:
  exposes:
    - type: mcp
      namespace: retail-sales
      port: 8080
      tools:
        - name: get-retail-account
          description: "Given a Salesforce account ID, retrieve retail account details. Use for account 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: tier
              type: string
              mapping: "$.Account_Tier__c"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://nike.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

Aggregates Salesforce wholesale pipeline data in Snowflake, refreshes Power BI dashboards, and distributes weekly digests to sales leadership via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Salesforce Wholesale Pipeline Digest"
  description: "Aggregates Salesforce wholesale pipeline data in Snowflake, refreshes Power BI dashboards, and distributes weekly digests to sales leadership via Microsoft Teams."
  tags:
    - sales
    - salesforce
    - snowflake
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: salesforce_wholesale
      port: 8080
      tools:
        - name: salesforce-wholesale
          description: "Given an execution date, run the salesforce wholesale pipeline 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.SALESFORCE_WHOLESALE_PIPELINE_DIGEST LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.SALESFORCE_WHOLESALE_PIPELINE__RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_salesforce_wholesale_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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

Enriches Salesforce leads with ZoomInfo data, stores enriched profiles in Snowflake, and notifies the sales team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Salesforce ZoomInfo Lead Enrichment"
  description: "Enriches Salesforce leads with ZoomInfo data, stores enriched profiles in Snowflake, and notifies the sales team via Microsoft Teams."
  tags:
    - sales
    - salesforce
    - zoominfo
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: salesforce_zoominfo_
      port: 8080
      tools:
        - name: salesforce-zoominfo
          description: "Given an execution date, run the salesforce zoominfo lead enrichment 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_ZOOMINFO_LEAD_ENRICHMENT LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.SALESFORCE_ZOOMINFO_LEAD_ENRIC_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_salesforce_zoominfo__channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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

Onboards new footwear suppliers in SAP Ariba, creates ServiceNow vendor setup requests, logs in Snowflake, and notifies the procurement team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "SAP Ariba Footwear Supplier Onboarding"
  description: "Onboards new footwear suppliers in SAP Ariba, creates ServiceNow vendor setup requests, logs in Snowflake, and notifies the procurement team via Microsoft Teams."
  tags:
    - procurement
    - sap
    - servicenow
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: sap_ariba_footwear_s
      port: 8080
      tools:
        - name: sap-ariba
          description: "Given an execution date, run the sap ariba footwear supplier onboarding 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_ARIBA_FOOTWEAR_SUPPLIER_ONBOARDING LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.SAP_ARIBA_FOOTWEAR_SUPPLIER_ON_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "procurement"
                short_description: "SAP Ariba Footwear Supplier Onboarding processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_sap_ariba_footwear_s_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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 procurement request is submitted in SAP Ariba, validates the budget in SAP S/4HANA, routes to the appropriate approver, and notifies them via Microsoft Teams.

naftiko: "0.5"
info:
  label: "SAP Ariba Procurement Request Routing"
  description: "When a new procurement request is submitted in SAP Ariba, validates the budget in SAP S/4HANA, routes to the appropriate approver, and notifies them via Microsoft Teams."
  tags:
    - procurement
    - finance
    - sap-ariba
    - sap
    - approval
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: procurement-ops
      port: 8080
      tools:
        - name: route-procurement-request
          description: "Given an Ariba requisition ID and cost center, validate available budget in SAP S/4HANA and route the request to the cost center manager for approval via Teams. Use for automated procurement approval routing."
          inputParameters:
            - name: requisition_id
              in: body
              type: string
              description: "The SAP Ariba purchase requisition ID."
            - name: cost_center
              in: body
              type: string
              description: "The SAP cost center code for budget validation."
            - name: amount
              in: body
              type: number
              description: "The requisition total amount in USD."
          steps:
            - name: get-requisition
              type: call
              call: "ariba.get-requisition"
              with:
                req_id: "{{requisition_id}}"
            - name: check-budget
              type: call
              call: "sap-budget.get-cost-center-budget"
              with:
                cost_center: "{{cost_center}}"
            - name: notify-approver
              type: call
              call: "msteams-proc.send-message"
              with:
                recipient_upn: "{{get-requisition.requester_email}}"
                text: "Procurement request {{requisition_id}} for ${{amount}} submitted. Budget available: {{check-budget.available}}. Pending approval."
  consumes:
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/purchase-requisitions/v1"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: requisitions
          path: "/requisitions/{{req_id}}"
          inputParameters:
            - name: req_id
              in: path
          operations:
            - name: get-requisition
              method: GET
    - type: http
      namespace: sap-budget
      baseUri: "https://nike-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-budget
              method: GET
    - type: http
      namespace: msteams-proc
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/chats"
          operations:
            - name: send-message
              method: POST

Reviews SAP Concur travel expenses for athlete-related travel compliance, logs in Snowflake, creates ServiceNow exceptions, and notifies the finance team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "SAP Concur Athlete Travel Compliance"
  description: "Reviews SAP Concur travel expenses for athlete-related travel compliance, logs in Snowflake, creates ServiceNow exceptions, and notifies the finance team via Microsoft Teams."
  tags:
    - finance
    - sap
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: sap_concur_athlete_t
      port: 8080
      tools:
        - name: sap-concur
          description: "Given an execution date, run the sap concur athlete travel compliance 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_ATHLETE_TRAVEL_COMPLIANCE LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.SAP_CONCUR_ATHLETE_TRAVEL_COMP_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "finance"
                short_description: "SAP Concur Athlete Travel Compliance processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_sap_concur_athlete_t_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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 high-value expense report is submitted in SAP Concur, validates the claim against SAP cost center budgets and routes to the finance manager via Teams for approval.

naftiko: "0.5"
info:
  label: "SAP Concur Expense Approval Escalation"
  description: "When a high-value expense report is submitted in SAP Concur, validates the claim against SAP cost center budgets and routes to the finance manager via Teams for approval."
  tags:
    - finance
    - expense-management
    - sap-concur
    - sap
    - microsoft-teams
    - approval
capability:
  exposes:
    - type: mcp
      namespace: finance-expenses
      port: 8080
      tools:
        - name: escalate-expense-report
          description: "Given a Concur expense report ID and total, validate remaining budget in SAP and notify the finance manager in Teams with the report details and approval link. Use when expense reports exceed policy thresholds."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "The SAP Concur expense report ID."
            - name: total_amount
              in: body
              type: number
              description: "The total expense amount in USD."
            - name: cost_center
              in: body
              type: string
              description: "The SAP cost center to validate budget against."
          steps:
            - name: get-report
              type: call
              call: "concur.get-expense-report"
              with:
                report_id: "{{report_id}}"
            - name: check-budget
              type: call
              call: "sap-exp.get-cost-center-balance"
              with:
                cost_center: "{{cost_center}}"
            - name: notify-manager
              type: call
              call: "msteams-exp.send-message"
              with:
                recipient_upn: "{{get-report.manager_email}}"
                text: "Expense report {{report_id}} for ${{total_amount}} requires approval. Budget remaining: {{check-budget.available}}."
  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: sap-exp
      baseUri: "https://nike-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-balance
              method: GET
    - type: http
      namespace: msteams-exp
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/chats"
          operations:
            - name: send-message
              method: POST

Retrieves cost center details from SAP.

naftiko: "0.5"
info:
  label: "SAP Cost Center Lookup"
  description: "Retrieves cost center details from SAP."
  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 details. Use for financial 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"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://nike-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

Calculates import duty estimates from SAP trade data in Snowflake, flags discrepancies, creates ServiceNow cases, and alerts the trade compliance team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "SAP Customs Import Duty Calculator"
  description: "Calculates import duty estimates from SAP trade data in Snowflake, flags discrepancies, creates ServiceNow cases, and alerts the trade compliance team via Microsoft Teams."
  tags:
    - compliance
    - sap
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: sap_customs_import_d
      port: 8080
      tools:
        - name: sap-customs
          description: "Given an execution date, run the sap customs import duty calculator 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_CUSTOMS_IMPORT_DUTY_CALCULATOR LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.SAP_CUSTOMS_IMPORT_DUTY_CALCUL_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "compliance"
                short_description: "SAP Customs Import Duty Calculator processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_sap_customs_import_d_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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 inventory aging data from SAP in Snowflake, flags slow-moving SKUs, creates Jira markdown action items, and notifies the merchandise planning team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "SAP Inventory Aging Alert"
  description: "Monitors inventory aging data from SAP in Snowflake, flags slow-moving SKUs, creates Jira markdown action items, and notifies the merchandise planning team via Microsoft Teams."
  tags:
    - supply-chain
    - sap
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: sap_inventory_aging_
      port: 8080
      tools:
        - name: sap-inventory
          description: "Given an execution date, run the sap inventory aging alert 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_INVENTORY_AGING_ALERT LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.SAP_INVENTORY_AGING_ALERT_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "NKOPS"
                issue_type: "Task"
                summary: "SAP Inventory Aging Alert - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_sap_inventory_aging__channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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 material master data from SAP by material number.

naftiko: "0.5"
info:
  label: "SAP Material Master Lookup"
  description: "Retrieves material master data from SAP by material number."
  tags:
    - supply-chain
    - sap
    - product-data
capability:
  exposes:
    - type: mcp
      namespace: product-data
      port: 8080
      tools:
        - name: get-material
          description: "Given a SAP material number, retrieve material master data. Use for product inquiries."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "The SAP material number."
          call: "sap.get-material"
          with:
            material_number: "{{material_number}}"
          outputParameters:
            - name: description
              type: string
              mapping: "$.d.MaterialDescription"
            - name: material_group
              type: string
              mapping: "$.d.MaterialGroup"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://nike-s4.sap.com/sap/opu/odata/sap/API_PRODUCT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: materials
          path: "/A_Product('{{material_number}}')"
          inputParameters:
            - name: material_number
              in: path
          operations:
            - name: get-material
              method: GET

Validates SAP period-close readiness in Snowflake, flags open items, creates ServiceNow tasks, and notifies the accounting team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "SAP Period Close Checklist Automation"
  description: "Validates SAP period-close readiness in Snowflake, flags open items, creates ServiceNow tasks, and notifies the accounting team via Microsoft Teams."
  tags:
    - finance
    - sap
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: sap_period_close_che
      port: 8080
      tools:
        - name: sap-period
          description: "Given an execution date, run the sap period close checklist 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_CLOSE_CHECKLIST_AUTOMATION LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.SAP_PERIOD_CLOSE_CHECKLIST_AUT_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "finance"
                short_description: "SAP Period Close Checklist Automation processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_sap_period_close_che_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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

At the end of each financial period, queries SAP S/4HANA for open journal entries and unposted items, then creates a ServiceNow period-close task for the accounting team.

naftiko: "0.5"
info:
  label: "SAP Period-End Close Checklist"
  description: "At the end of each financial period, queries SAP S/4HANA for open journal entries and unposted items, then creates a ServiceNow period-close task for the accounting team."
  tags:
    - finance
    - period-close
    - sap
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: finance-close
      port: 8080
      tools:
        - name: run-period-close-checklist
          description: "Given a fiscal period and year, query SAP for open items and unposted journals, then create a ServiceNow checklist task. Use at month-end or quarter-end to support the accounting close process."
          inputParameters:
            - name: fiscal_period
              in: body
              type: string
              description: "The fiscal period number (e.g., '006' for June)."
            - name: fiscal_year
              in: body
              type: string
              description: "The fiscal year (e.g., '2026')."
          steps:
            - name: get-open-items
              type: call
              call: "sap-close.get-open-journal-entries"
              with:
                period: "{{fiscal_period}}"
                year: "{{fiscal_year}}"
            - name: create-checklist
              type: call
              call: "servicenow-close.create-task"
              with:
                short_description: "Period close checklist FY{{fiscal_year}}/P{{fiscal_period}}"
                description: "Open items: {{get-open-items.count}}. Please resolve before period close."
  consumes:
    - type: http
      namespace: sap-close
      baseUri: "https://nike-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_JournalEntryItem"
          inputParameters:
            - name: period
              in: query
            - name: year
              in: query
          operations:
            - name: get-open-journal-entries
              method: GET
    - type: http
      namespace: servicenow-close
      baseUri: "https://nike.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

Processes RMA requests in SAP, validates return eligibility in Snowflake, creates ServiceNow cases, and notifies the returns team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "SAP Return Merchandise Authorization Processor"
  description: "Processes RMA requests in SAP, validates return eligibility in Snowflake, creates ServiceNow cases, and notifies the returns team via Microsoft Teams."
  tags:
    - logistics
    - sap
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: sap_return_merchandi
      port: 8080
      tools:
        - name: sap-return
          description: "Given an execution date, run the sap return merchandise authorization processor 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_RETURN_MERCHANDISE_AUTHORIZATION_PRO LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.SAP_RETURN_MERCHANDISE_AUTHORI_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "logistics"
                short_description: "SAP Return Merchandise Authorization Processor processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_sap_return_merchandi_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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 SAP S/4HANA purchase order by number and returns header status, vendor, total value, and delivery schedule for procurement and finance teams.

naftiko: "0.5"
info:
  label: "SAP S/4HANA Purchase Order Lookup"
  description: "Looks up a SAP S/4HANA purchase order by number and returns header status, vendor, total value, and delivery schedule for procurement and finance teams."
  tags:
    - finance
    - procurement
    - sap
    - purchase-order
capability:
  exposes:
    - type: mcp
      namespace: erp
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Look up a SAP purchase order by PO number. Returns header status, vendor, total value, currency, and delivery schedule. Use for invoice matching, supplier queries, and spend reporting."
          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_value
              type: string
              mapping: "$.d.TotalAmount"
            - name: currency
              type: string
              mapping: "$.d.TransactionCurrency"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://nike-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 sales order by number, returning customer, delivery status, and value.

naftiko: "0.5"
info:
  label: "SAP Sales Order Lookup"
  description: "Retrieves a SAP sales order by number, returning customer, delivery status, and value."
  tags:
    - sales
    - sap
    - order-management
capability:
  exposes:
    - type: mcp
      namespace: order-management
      port: 8080
      tools:
        - name: get-sales-order
          description: "Given a SAP sales order number, retrieve order details. Use for order inquiries."
          inputParameters:
            - name: order_number
              in: body
              type: string
              description: "The SAP sales order number."
          call: "sap.get-sales-order"
          with:
            order_number: "{{order_number}}"
          outputParameters:
            - name: customer
              type: string
              mapping: "$.d.SoldToParty"
            - name: net_value
              type: string
              mapping: "$.d.TotalNetAmount"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://nike-s4.sap.com/sap/opu/odata/sap/API_SALES_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: sales-orders
          path: "/A_SalesOrder('{{order_number}}')"
          inputParameters:
            - name: order_number
              in: path
          operations:
            - name: get-sales-order
              method: GET

Generates seasonal product allocation plans from SAP data in Snowflake, creates Jira distribution tasks, and notifies the merchandising team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "SAP Seasonal Allocation Planner"
  description: "Generates seasonal product allocation plans from SAP data in Snowflake, creates Jira distribution tasks, and notifies the merchandising team via Microsoft Teams."
  tags:
    - supply-chain
    - sap
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: sap_seasonal_allocat
      port: 8080
      tools:
        - name: sap-seasonal
          description: "Given an execution date, run the sap seasonal allocation planner 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_SEASONAL_ALLOCATION_PLANNER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.SAP_SEASONAL_ALLOCATION_PLANNE_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "NKOPS"
                issue_type: "Task"
                summary: "SAP Seasonal Allocation Planner - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_sap_seasonal_allocat_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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

Aggregates sustainability metrics from SAP in Snowflake, refreshes Power BI ESG dashboards, and distributes to the sustainability team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "SAP Sustainability Reporting Pipeline"
  description: "Aggregates sustainability metrics from SAP in Snowflake, refreshes Power BI ESG dashboards, and distributes to the sustainability team via Microsoft Teams."
  tags:
    - sustainability
    - sap
    - snowflake
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: sap_sustainability_r
      port: 8080
      tools:
        - name: sap-sustainability
          description: "Given an execution date, run the sap sustainability reporting 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.SAP_SUSTAINABILITY_REPORTING_PIPELINE LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.SAP_SUSTAINABILITY_REPORTING_P_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_sap_sustainability_r_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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 vendor master data from SAP.

naftiko: "0.5"
info:
  label: "SAP Vendor Master Lookup"
  description: "Retrieves vendor master data from SAP."
  tags:
    - procurement
    - sap
    - vendor-management
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: get-vendor
          description: "Given a SAP vendor number, retrieve master data. 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"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://nike-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

When a change request is submitted in ServiceNow, notifies approvers in Microsoft Teams and awaits a response before proceeding with the deployment window.

naftiko: "0.5"
info:
  label: "ServiceNow Change Request Workflow"
  description: "When a change request is submitted in ServiceNow, notifies approvers in Microsoft Teams and awaits a response before proceeding with the deployment window."
  tags:
    - itsm
    - change-management
    - servicenow
    - microsoft-teams
    - approval
capability:
  exposes:
    - type: mcp
      namespace: itsm-change
      port: 8080
      tools:
        - name: submit-change-request
          description: "Given a change description, risk level, and planned start datetime, create a ServiceNow change request and notify the CAB approvers in Teams. Use before any production deployment or infrastructure change."
          inputParameters:
            - name: change_description
              in: body
              type: string
              description: "Human-readable description of the proposed change."
            - name: risk
              in: body
              type: string
              description: "Risk level: low, medium, or high."
            - name: planned_start
              in: body
              type: string
              description: "Planned start datetime in ISO 8601 format."
          steps:
            - name: create-change
              type: call
              call: "servicenow-chg.create-change"
              with:
                short_description: "{{change_description}}"
                risk: "{{risk}}"
                start_date: "{{planned_start}}"
            - name: notify-cab
              type: call
              call: "msteams-chg.post-message"
              with:
                channel_id: "$secrets.cab_channel_id"
                text: "Change Request {{create-change.number}} submitted. Risk: {{risk}}. Planned: {{planned_start}}. Description: {{change_description}}"
  consumes:
    - type: http
      namespace: servicenow-chg
      baseUri: "https://nike.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-requests
          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: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Retrieves a ServiceNow incident status by number.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Status Lookup"
  description: "Retrieves a ServiceNow incident status 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. Use for status checks."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The 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://nike.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 P1 incident is created in ServiceNow, triggers PagerDuty on-call escalation, creates a Datadog event, and posts a war-room notification to the IT ops Teams channel.

naftiko: "0.5"
info:
  label: "ServiceNow IT Incident P1 Escalation"
  description: "When a P1 incident is created in ServiceNow, triggers PagerDuty on-call escalation, creates a Datadog event, and posts a war-room notification to the IT ops Teams channel."
  tags:
    - itsm
    - incident-response
    - servicenow
    - pagerduty
    - datadog
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: itsm-ops
      port: 8080
      tools:
        - name: escalate-p1-incident
          description: "Given a ServiceNow incident number and description, trigger PagerDuty, create a Datadog event marker, and notify the IT ops Teams channel. Invoke immediately on P1 incident creation."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number (e.g., INC0012345)."
            - name: short_description
              in: body
              type: string
              description: "Brief description of the incident."
          steps:
            - name: page-oncall
              type: call
              call: "pagerduty.trigger-incident"
              with:
                title: "P1: {{short_description}}"
                severity: "critical"
                incident_key: "{{incident_number}}"
            - name: create-dd-event
              type: call
              call: "datadog.create-event"
              with:
                title: "P1 Incident: {{incident_number}}"
                alert_type: "error"
                text: "{{short_description}}"
            - name: notify-ops
              type: call
              call: "msteams-ops.post-message"
              with:
                channel_id: "$secrets.it_ops_channel_id"
                text: "P1 Incident {{incident_number}}: {{short_description}} | PagerDuty: {{page-oncall.incident_url}}"
  consumes:
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.pagerduty_token"
        placement: header
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: trigger-incident
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apikey
        key: "DD-API-KEY"
        value: "$secrets.datadog_api_key"
        placement: header
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: msteams-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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Sends a message to a specified Slack channel.

naftiko: "0.5"
info:
  label: "Slack Channel Message Sender"
  description: "Sends a message to a specified Slack channel."
  tags:
    - collaboration
    - slack
    - messaging
capability:
  exposes:
    - type: mcp
      namespace: slack
      port: 8080
      tools:
        - name: send-message
          description: "Given a Slack channel ID and message, post to the channel. Use for notifications."
          inputParameters:
            - name: channel_id
              in: body
              type: string
              description: "The Slack channel ID."
            - name: message_text
              in: body
              type: string
              description: "The message body."
          call: "slack.post-message"
          with:
            channel: "{{channel_id}}"
            text: "{{message_text}}"
          outputParameters:
            - name: ts
              type: string
              mapping: "$.ts"
  consumes:
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Collects product feedback from Slack channels, creates Jira feature requests, logs in Snowflake, and notifies the product management team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Slack to Jira Product Feedback Pipeline"
  description: "Collects product feedback from Slack channels, creates Jira feature requests, logs in Snowflake, and notifies the product management team via Microsoft Teams."
  tags:
    - product-management
    - slack
    - jira
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: slack_to_jira_produc
      port: 8080
      tools:
        - name: slack-to
          description: "Given an execution date, run the slack to jira product feedback 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.SLACK_TO_JIRA_PRODUCT_FEEDBACK_PIPELINE LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.SLACK_TO_JIRA_PRODUCT_FEEDBACK_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "NKOPS"
                issue_type: "Task"
                summary: "Slack to Jira Product Feedback Pipeline - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_slack_to_jira_produc_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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

Aggregates pre-launch demand signals from Nike.com and SNKRS app in Snowflake, adjusts inventory allocation, and notifies the merchandising team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Sneaker Launch Demand Signal Processor"
  description: "Aggregates pre-launch demand signals from Nike.com and SNKRS app in Snowflake, adjusts inventory allocation, and notifies the merchandising team via Microsoft Teams."
  tags:
    - retail
    - e-commerce
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: sneaker_launch_deman
      port: 8080
      tools:
        - name: sneaker-launch
          description: "Given an execution date, run the sneaker launch demand signal processor 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.SNEAKER_LAUNCH_DEMAND_SIGNAL_PROCESSOR LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.SNEAKER_LAUNCH_DEMAND_SIGNAL_P_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_sneaker_launch_deman_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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 SNKRS app launch metrics in Snowflake during product drops, flags performance issues, creates ServiceNow incidents, and alerts the digital platform team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "SNKRS App Release Monitoring Chain"
  description: "Monitors SNKRS app launch metrics in Snowflake during product drops, flags performance issues, creates ServiceNow incidents, and alerts the digital platform team via Microsoft Teams."
  tags:
    - e-commerce
    - mobile
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: snkrs_app_release_mo
      port: 8080
      tools:
        - name: snkrs-app
          description: "Given an execution date, run the snkrs app release monitoring 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.SNKRS_APP_RELEASE_MONITORING_CHAIN LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.SNKRS_APP_RELEASE_MONITORING_C_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "e-commerce"
                short_description: "SNKRS App Release Monitoring Chain processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_snkrs_app_release_mo_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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

Polls Snowflake task history for failed or stalled e-commerce data pipeline tasks and opens a Jira incident if failures are detected, notifying the data engineering team in Teams.

naftiko: "0.5"
info:
  label: "Snowflake E-Commerce Data Pipeline Monitor"
  description: "Polls Snowflake task history for failed or stalled e-commerce data pipeline tasks and opens a Jira incident if failures are detected, notifying the data engineering team in Teams."
  tags:
    - data
    - e-commerce
    - snowflake
    - jira
    - monitoring
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: data-pipeline-ops
      port: 8080
      tools:
        - name: monitor-ecommerce-pipelines
          description: "Query Snowflake task history for e-commerce pipeline failures and open a Jira incident if failures are found. Post a health summary to the data engineering Teams channel. Use for automated e-commerce data platform monitoring."
          inputParameters:
            - name: lookback_hours
              in: body
              type: integer
              description: "Number of hours to look back for failed pipeline tasks."
          steps:
            - name: query-failures
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "SELECT COUNT(*) as count FROM TABLE(INFORMATION_SCHEMA.TASK_HISTORY()) WHERE state='FAILED' AND scheduled_time > DATEADD(hour, -{{lookback_hours}}, CURRENT_TIMESTAMP())"
            - name: create-incident
              type: call
              call: "jira-data.create-issue"
              with:
                project_key: "DATA"
                issuetype: "Bug"
                summary: "E-commerce pipeline failures in last {{lookback_hours}}h"
            - name: notify-data-team
              type: call
              call: "msteams-data.post-message"
              with:
                channel_id: "$secrets.data_eng_channel_id"
                text: "Pipeline Monitor: {{query-failures.count}} failures in last {{lookback_hours}}h. Jira: {{create-incident.key}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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-data
      baseUri: "https://nike.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-data
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

Executes a read-only SQL query against the Nike Snowflake data warehouse.

naftiko: "0.5"
info:
  label: "Snowflake Query Executor"
  description: "Executes a read-only SQL query against the Nike Snowflake data warehouse."
  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. Use for analytics."
          inputParameters:
            - name: sql_statement
              in: body
              type: string
              description: "The 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://nike.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: execute-statement
              method: POST

Executes a Splunk search query.

naftiko: "0.5"
info:
  label: "Splunk Log Search"
  description: "Executes a Splunk search query."
  tags:
    - security
    - splunk
    - logging
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: search-logs
          description: "Given a Splunk query and time range, execute the search. Use for investigations."
          inputParameters:
            - name: search_query
              in: body
              type: string
              description: "The Splunk SPL query."
            - name: earliest_time
              in: body
              type: string
              description: "Search start time."
          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://nike-splunk.example.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: searches
          path: "/search/jobs"
          operations:
            - name: create-search
              method: POST

Tracks sustainable material sourcing metrics in Snowflake, computes Move to Zero progress, creates Jira tasks, and notifies the sustainability team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Sustainable Materials Sourcing Tracker"
  description: "Tracks sustainable material sourcing metrics in Snowflake, computes Move to Zero progress, creates Jira tasks, and notifies the sustainability team via Microsoft Teams."
  tags:
    - sustainability
    - sourcing
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: sustainable_material
      port: 8080
      tools:
        - name: sustainable-materials
          description: "Given an execution date, run the sustainable materials sourcing 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.SUSTAINABLE_MATERIALS_SOURCING_TRACKER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.SUSTAINABLE_MATERIALS_SOURCING_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "NKOPS"
                issue_type: "Task"
                summary: "Sustainable Materials Sourcing Tracker - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_sustainable_material_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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 warehouse pick-pack-ship metrics in Snowflake, identifies bottlenecks, creates ServiceNow optimization requests, and notifies the logistics team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Warehouse Pick Pack Ship Optimizer"
  description: "Analyzes warehouse pick-pack-ship metrics in Snowflake, identifies bottlenecks, creates ServiceNow optimization requests, and notifies the logistics team via Microsoft Teams."
  tags:
    - logistics
    - warehouse
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: warehouse_pick_pack_
      port: 8080
      tools:
        - name: warehouse-pick
          description: "Given an execution date, run the warehouse pick pack ship optimizer 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.WAREHOUSE_PICK_PACK_SHIP_OPTIMIZER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.WAREHOUSE_PICK_PACK_SHIP_OPTIM_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "logistics"
                short_description: "Warehouse Pick Pack Ship Optimizer processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_warehouse_pick_pack__channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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

Identifies employees who haven't completed benefits enrollment, logs in Snowflake, and sends reminders via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Workday Benefits Open Enrollment Reminder"
  description: "Identifies employees who haven't completed benefits enrollment, logs 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_REMINDE LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.WORKDAY_BENEFITS_OPEN_ENROLLME_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://nike.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

Returns active Nike headcount grouped by cost center and department from Workday for workforce planning and finance allocation reviews.

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

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

naftiko: "0.5"
info:
  label: "Workday Headcount vs Plan Tracker"
  description: "Compares Workday headcount against plan 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_vs
      port: 8080
      tools:
        - name: workday-headcount
          description: "Given an execution date, run the workday headcount vs plan 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.WORKDAY_HEADCOUNT_VS_PLAN_TRACKER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.WORKDAY_HEADCOUNT_VS_PLAN_TRAC_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_workday_headcount_vs_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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 Workday integration fails, logs the error in Snowflake, creates a ServiceNow incident, and alerts the HRIS team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Workday Integration Failure Handler"
  description: "When a Workday integration fails, logs the error in Snowflake, creates a ServiceNow incident, and alerts the HRIS team via Microsoft Teams."
  tags:
    - hr
    - workday
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: workday_integration_
      port: 8080
      tools:
        - name: workday-integration
          description: "Given an execution date, run the workday integration 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.WORKDAY_INTEGRATION_FAILURE_HANDLER LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.WORKDAY_INTEGRATION_FAILURE_HA_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "hr"
                short_description: "Workday Integration Failure Handler processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_workday_integration__channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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

Routes new Workday job requisitions through approval chains in Snowflake, creates Jira tracking tasks, and notifies approvers via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Workday Job Requisition Approval Chain"
  description: "Routes new Workday job requisitions through approval chains in Snowflake, creates Jira tracking tasks, and notifies approvers via Microsoft Teams."
  tags:
    - hr
    - recruiting
    - workday
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: workday_job_requisit
      port: 8080
      tools:
        - name: workday-job
          description: "Given an execution date, run the workday job requisition approval 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.WORKDAY_JOB_REQUISITION_APPROVAL_CHAIN LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.WORKDAY_JOB_REQUISITION_APPROV_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "NKOPS"
                issue_type: "Task"
                summary: "Workday Job Requisition Approval Chain - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_workday_job_requisit_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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 job requisition is approved in Workday, automatically publishes the role to LinkedIn and sends a notification to the talent acquisition team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Workday Job Requisition to LinkedIn Posting"
  description: "When a job requisition is approved in Workday, automatically publishes the role to LinkedIn and sends a notification to the talent acquisition team in Microsoft Teams."
  tags:
    - hr
    - recruiting
    - workday
    - linkedin
    - microsoft-teams
    - talent-acquisition
capability:
  exposes:
    - type: mcp
      namespace: talent-acquisition
      port: 8080
      tools:
        - name: publish-job-posting
          description: "Given a Workday requisition ID, fetch job details and publish the position to LinkedIn, then notify the TA team in Teams. Use when a new job requisition is approved in Workday."
          inputParameters:
            - name: requisition_id
              in: body
              type: string
              description: "The Workday job requisition ID."
          steps:
            - name: get-requisition
              type: call
              call: "workday-rec.get-job-requisition"
              with:
                req_id: "{{requisition_id}}"
            - name: post-linkedin
              type: call
              call: "linkedin.create-job-posting"
              with:
                title: "{{get-requisition.job_title}}"
                description: "{{get-requisition.description}}"
                location: "{{get-requisition.location}}"
                company_urn: "$secrets.nike_linkedin_org_urn"
            - name: notify-ta
              type: call
              call: "msteams-ta.post-message"
              with:
                channel_id: "$secrets.ta_channel_id"
                text: "Job posted: {{get-requisition.job_title}} | LinkedIn: {{post-linkedin.job_url}}"
  consumes:
    - type: http
      namespace: workday-rec
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: job-requisitions
          path: "/nike/jobRequisitions/{{req_id}}"
          inputParameters:
            - name: req_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
    - type: http
      namespace: msteams-ta
      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: channel_id
              in: path
          operations:
            - name: post-message
              method: POST

When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft 365 account, assigns Okta application groups, and sends a Teams welcome message.

naftiko: "0.5"
info:
  label: "Workday New Hire Onboarding Orchestrator"
  description: "When a new hire is created in Workday, opens a ServiceNow onboarding ticket, provisions a Microsoft 365 account, assigns Okta application groups, and sends a Teams welcome message."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - microsoft-365
    - okta
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Given a Workday employee ID and start date, orchestrate the full onboarding sequence: open a ServiceNow ticket, provision Microsoft 365, assign Okta groups, and send a Teams welcome. Invoke when a new hire is created in Workday."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID for the new hire."
            - name: start_date
              in: body
              type: string
              description: "The employee's first day in YYYY-MM-DD format."
            - name: job_family
              in: body
              type: string
              description: "The job family or function (e.g., Engineering, Retail, Marketing) to determine Okta group assignment."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: open-snow-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "New hire onboarding: {{get-employee.full_name}}"
                category: "hr_onboarding"
                assigned_to: "IT_Onboarding"
            - name: provision-m365
              type: call
              call: "msgraph.create-user"
              with:
                display_name: "{{get-employee.full_name}}"
                mail_nickname: "{{get-employee.user_principal_name}}"
                department: "{{get-employee.department}}"
            - name: assign-okta-groups
              type: call
              call: "okta.assign-user-to-group"
              with:
                login: "{{get-employee.work_email}}"
                job_family: "{{job_family}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.work_email}}"
                text: "Welcome to Nike, {{get-employee.first_name}}! Your onboarding ticket: {{open-snow-ticket.number}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/nike/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://nike.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: msgraph
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users"
          operations:
            - name: create-user
              method: POST
    - type: http
      namespace: okta
      baseUri: "https://nike.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: user-groups
          path: "/users"
          operations:
            - name: assign-user-to-group
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: chats
          path: "/chats"
          operations:
            - name: send-message
              method: POST

Reconciles Workday payroll data against financial records in Snowflake, flags discrepancies, creates ServiceNow cases, and notifies the payroll team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Workday Payroll Reconciliation Workflow"
  description: "Reconciles Workday payroll data against financial records in Snowflake, flags discrepancies, creates ServiceNow cases, and notifies the payroll team via Microsoft Teams."
  tags:
    - hr
    - payroll
    - workday
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: workday_payroll_reco
      port: 8080
      tools:
        - name: workday-payroll
          description: "Given an execution date, run the workday payroll reconciliation 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.WORKDAY_PAYROLL_RECONCILIATION_WORKFLOW LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.WORKDAY_PAYROLL_RECONCILIATION_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "hr"
                short_description: "Workday Payroll Reconciliation Workflow processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_workday_payroll_reco_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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

At the start of a performance review cycle, fetches eligible employees from Workday and creates individual performance review tasks in ServiceNow for each manager.

naftiko: "0.5"
info:
  label: "Workday Performance Review Campaign Launch"
  description: "At the start of a performance review cycle, fetches eligible employees from Workday and creates individual performance review tasks in ServiceNow for each manager."
  tags:
    - hr
    - performance-management
    - workday
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: hr-performance
      port: 8080
      tools:
        - name: launch-performance-reviews
          description: "Given a review cycle name and department, fetch eligible employees from Workday and create review tasks in ServiceNow for each manager. Use to kick off annual or mid-year performance cycles."
          inputParameters:
            - name: review_cycle
              in: body
              type: string
              description: "Performance review cycle name (e.g., 2026-Annual)."
            - name: department
              in: body
              type: string
              description: "Department to scope the review launch."
          steps:
            - name: get-eligible-employees
              type: call
              call: "workday-perf.get-workers-by-department"
              with:
                department: "{{department}}"
            - name: create-review-tasks
              type: call
              call: "servicenow-perf.create-task"
              with:
                short_description: "Performance reviews {{review_cycle}}: {{department}}"
                category: "hr_performance_review"
  consumes:
    - type: http
      namespace: workday-perf
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers-by-department
          path: "/nike/workers"
          inputParameters:
            - name: department
              in: query
          operations:
            - name: get-workers-by-department
              method: GET
    - type: http
      namespace: servicenow-perf
      baseUri: "https://nike.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

Launches Workday performance review cycles, tracks completion in Snowflake, creates Jira tasks for lagging teams, and notifies HR via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Workday Performance Review Cycle Launcher"
  description: "Launches Workday performance review cycles, tracks completion in Snowflake, creates Jira tasks for lagging teams, and notifies HR via Microsoft Teams."
  tags:
    - hr
    - performance
    - workday
    - snowflake
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: workday_performance_
      port: 8080
      tools:
        - name: workday-performance
          description: "Given an execution date, run the workday performance review cycle 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_PERFORMANCE_REVIEW_CYCLE_LAUNCHE LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.WORKDAY_PERFORMANCE_REVIEW_CYC_RESULTS SELECT * FROM staging"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "NKOPS"
                issue_type: "Task"
                summary: "Workday Performance Review Cycle Launcher - review required"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_workday_performance__channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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

Generates retail store staffing forecasts from Workday data in Snowflake, compares to demand projections, and notifies store operations via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Workday Retail Staffing Forecast"
  description: "Generates retail store staffing forecasts from Workday data in Snowflake, compares to demand projections, and notifies store operations via Microsoft Teams."
  tags:
    - hr
    - retail
    - workday
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: workday_retail_staff
      port: 8080
      tools:
        - name: workday-retail
          description: "Given an execution date, run the workday retail staffing forecast 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_RETAIL_STAFFING_FORECAST LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.WORKDAY_RETAIL_STAFFING_FORECA_RESULTS SELECT * FROM staging"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_workday_retail_staff_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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 employee changes roles or departments in Workday, updates their Okta group memberships for the new access profile and creates a ServiceNow change record.

naftiko: "0.5"
info:
  label: "Workday Role Change Access Sync"
  description: "When an employee changes roles or departments in Workday, updates their Okta group memberships for the new access profile and creates a ServiceNow change record."
  tags:
    - hr
    - identity
    - role-change
    - workday
    - okta
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: hr-identity
      port: 8080
      tools:
        - name: sync-role-change-access
          description: "Given a Workday employee ID and new role details, update Okta group memberships to align with the new access profile and log a ServiceNow change record. Invoke when an employee changes position or department in Workday."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday worker ID of the employee whose role changed."
            - name: new_role
              in: body
              type: string
              description: "The new job title."
            - name: new_department
              in: body
              type: string
              description: "The new department."
          steps:
            - name: get-employee
              type: call
              call: "workday-role.get-worker"
              with:
                worker_id: "{{employee_id}}"
            - name: update-okta-groups
              type: call
              call: "okta-role.update-user-groups"
              with:
                login: "{{get-employee.work_email}}"
                department: "{{new_department}}"
            - name: log-change
              type: call
              call: "servicenow-role.create-change"
              with:
                short_description: "Role change: {{get-employee.full_name}} → {{new_role}} in {{new_department}}"
                category: "hr_role_change"
  consumes:
    - type: http
      namespace: workday-role
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/nike/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: okta-role
      baseUri: "https://nike.okta.com/api/v1"
      authentication:
        type: apikey
        key: "Authorization"
        value: "$secrets.okta_api_token"
        placement: header
      resources:
        - name: user-groups
          path: "/users/{{login}}/groups"
          inputParameters:
            - name: login
              in: path
          operations:
            - name: update-user-groups
              method: PUT
    - type: http
      namespace: servicenow-role
      baseUri: "https://nike.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: change-requests
          path: "/table/change_request"
          operations:
            - name: create-change
              method: POST

Looks up a Workday worker profile by employee ID.

naftiko: "0.5"
info:
  label: "Workday Worker Profile Lookup"
  description: "Looks up a Workday worker profile by employee ID."
  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. 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: "/nike/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET

Analyzes Zendesk ticket sentiment in Snowflake, escalates high-negativity patterns, creates ServiceNow cases, and alerts the customer experience team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Zendesk Customer Sentiment Escalation"
  description: "Analyzes Zendesk ticket sentiment in Snowflake, escalates high-negativity patterns, creates ServiceNow cases, and alerts the customer experience team via Microsoft Teams."
  tags:
    - support
    - zendesk
    - snowflake
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: zendesk_customer_sen
      port: 8080
      tools:
        - name: zendesk-customer
          description: "Given an execution date, run the zendesk customer sentiment 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.ZENDESK_CUSTOMER_SENTIMENT_ESCALATION LIMIT 100"
            - name: process-results
              type: call
              call: "snowflake.execute-statement"
              with:
                statement: "INSERT INTO ANALYTICS.ZENDESK_CUSTOMER_SENTIMENT_ESC_RESULTS SELECT * FROM staging"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                category: "support"
                short_description: "Zendesk Customer Sentiment Escalation processing complete"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "$secrets.teams_zendesk_customer_sen_channel"
                text: "Process complete. Results logged."
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://nike.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://nike.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 Zendesk support ticket by ID.

naftiko: "0.5"
info:
  label: "Zendesk Support Ticket Lookup"
  description: "Retrieves a Zendesk support ticket by ID."
  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 details. 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://nike.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