Adidas Capabilities

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

Sort
Expand

Retrieves page-level performance metrics from Adobe Analytics for a specified report suite and page path.

naftiko: "0.5"
info:
  label: "Adobe Analytics Page Performance"
  description: "Retrieves page-level performance metrics from Adobe Analytics for a specified report suite and page path."
  tags:
    - analytics
    - adobe-analytics
    - ecommerce
capability:
  exposes:
    - type: mcp
      namespace: digital-analytics
      port: 8080
      tools:
        - name: get-page-performance
          description: "Query Adobe Analytics for page views, bounce rate, and average time on page for a given URL path."
          inputParameters:
            - name: report_suite_id
              in: body
              type: string
              description: "The Adobe Analytics report suite ID."
            - name: page_path
              in: body
              type: string
              description: "The URL path to analyze."
          call: "adobe-analytics.get-report"
          with:
            report_suite_id: "{{report_suite_id}}"
            page_path: "{{page_path}}"
          outputParameters:
            - name: page_views
              type: string
              mapping: "$.rows[0].data[0]"
            - name: bounce_rate
              type: string
              mapping: "$.rows[0].data[1]"
            - name: avg_time_on_page
              type: string
              mapping: "$.rows[0].data[2]"
  consumes:
    - type: http
      namespace: adobe-analytics
      baseUri: "https://analytics.adobe.io/api/adidas/reports"
      authentication:
        type: bearer
        token: "$secrets.adobe_analytics_token"
      inputParameters:
        - name: x-api-key
          in: header
          value: "$secrets.adobe_client_id"
      resources:
        - name: reports
          path: "/ranked"
          operations:
            - name: get-report
              method: POST

Creates a Salesforce opportunity for an athlete endorsement, stores the contract in Box, updates the deal in Microsoft Planner, and notifies the brand team in Teams.

naftiko: "0.5"
info:
  label: "Athlete Endorsement Deal Tracker"
  description: "Creates a Salesforce opportunity for an athlete endorsement, stores the contract in Box, updates the deal in Microsoft Planner, and notifies the brand team in Teams."
  tags:
    - partnerships
    - salesforce
    - box
    - microsoft-planner
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: endorsements
      port: 8080
      tools:
        - name: create-endorsement-deal
          description: "Given athlete details and deal terms, create tracking records across Salesforce, Box, Planner, and Teams."
          inputParameters:
            - name: athlete_name
              in: body
              type: string
              description: "Name of the athlete."
            - name: deal_value
              in: body
              type: string
              description: "Total deal value."
            - name: sport_category
              in: body
              type: string
              description: "Sport category (e.g. running, football, basketball)."
            - name: contract_duration
              in: body
              type: string
              description: "Contract duration in months."
          steps:
            - name: create-opportunity
              type: call
              call: "salesforce.create-opportunity"
              with:
                name: "Endorsement: {{athlete_name}} — {{sport_category}}"
                amount: "{{deal_value}}"
                stage: "Negotiation"
                description: "{{contract_duration}} month endorsement deal with {{athlete_name}} for {{sport_category}}."
            - name: create-contract-folder
              type: call
              call: "box.create-folder"
              with:
                parent_folder_id: "$secrets.endorsements_folder"
                name: "{{athlete_name}}_{{sport_category}}"
            - name: create-planner-task
              type: call
              call: "planner.create-task"
              with:
                plan_id: "$secrets.endorsements_plan_id"
                title: "Review: {{athlete_name}} endorsement — {{deal_value}}"
                due_date: "+14d"
                description: "SF Opportunity: {{create-opportunity.id}} | Box: {{create-contract-folder.url}}"
            - name: notify-brand-team
              type: call
              call: "msteams.send-message"
              with:
                channel: "brand-partnerships"
                text: "New Endorsement Deal: {{athlete_name}} ({{sport_category}}) | Value: {{deal_value}} | Duration: {{contract_duration}}mo | SF: {{create-opportunity.id}} | Task: {{create-planner-task.id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://adidas.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity"
          operations:
            - name: create-opportunity
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: folders
          path: "/folders"
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: planner
      baseUri: "https://graph.microsoft.com/v1.0/planner"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: tasks
          path: "/tasks"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          operations:
            - name: send-message
              method: POST

Tracks sponsorship contracts in SAP, validates deliverables, updates Salesforce, creates renewal tasks in Jira, and notifies partnership team.

naftiko: "0.5"
info:
  label: "Athlete Sponsorship Contract Pipeline"
  description: "Tracks sponsorship contracts in SAP, validates deliverables, updates Salesforce, creates renewal tasks in Jira, and notifies partnership team."
  tags:
    - sponsorship
    - sap
    - salesforce
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: sponsorship
      port: 8080
      tools:
        - name: athlete_sponsorship_contract_pipeline
          description: "Orchestrate athlete sponsorship contract pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-salesforce
              type: call
              call: "salesforce.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-jira
              type: call
              call: "jira.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: sap
      baseUri: "https://adidas-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://adidas.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://adidas.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Retrieves a BigCommerce order by ID and returns order status, total, shipping address, and line items.

naftiko: "0.5"
info:
  label: "BigCommerce Order Lookup"
  description: "Retrieves a BigCommerce order by ID and returns order status, total, shipping address, and line items."
  tags:
    - ecommerce
    - bigcommerce
    - order-management
capability:
  exposes:
    - type: mcp
      namespace: ecommerce
      port: 8080
      tools:
        - name: get-order
          description: "Look up a BigCommerce order by ID and return its status, total, and shipping details."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The BigCommerce order ID."
          call: "bigcommerce.get-order"
          with:
            order_id: "{{order_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: total
              type: string
              mapping: "$.total_inc_tax"
            - name: shipping_address
              type: string
              mapping: "$.shipping_addresses"
  consumes:
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/adidas/v2"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      inputParameters:
        - name: X-Auth-Token
          in: header
          value: "$secrets.bigcommerce_auth_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET

# --- Orchestrated Capabilities (steps-based) ---

Collects social media mentions, runs sentiment analysis in Snowflake, updates HubSpot brand health metrics, and notifies communications team.

naftiko: "0.5"
info:
  label: "Brand Sentiment Analyzer"
  description: "Collects social media mentions, runs sentiment analysis in Snowflake, updates HubSpot brand health metrics, and notifies communications team."
  tags:
    - brand
    - snowflake
    - hubspot
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: brand
      port: 8080
      tools:
        - name: brand_sentiment_analyzer
          description: "Orchestrate brand sentiment analyzer workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-hubspot
              type: call
              call: "hubspot.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: hubspot-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST

On a GitHub Actions pipeline failure, creates a Datadog event marker, opens a ServiceNow incident, and alerts the engineering team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "CI/CD Pipeline Failure Handler"
  description: "On a GitHub Actions pipeline failure, creates a Datadog event marker, opens a ServiceNow incident, and alerts the engineering team in Microsoft Teams."
  tags:
    - devops
    - github-actions
    - datadog
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: devops
      port: 8080
      tools:
        - name: handle-pipeline-failure
          description: "Given a pipeline run ID, repo, and branch, create observability marker, open incident, and alert the team."
          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 (org/repo format)."
            - name: branch
              in: body
              type: string
              description: "The branch that failed."
            - name: failed_job
              in: body
              type: string
              description: "Name of the failed job."
          steps:
            - name: create-dd-event
              type: call
              call: "datadog.create-event"
              with:
                title: "Pipeline Failure: {{repository}} / {{branch}}"
                text: "Run ID: {{run_id}} | Job: {{failed_job}}"
                alert_type: "error"
                tags: "repo:{{repository}},branch:{{branch}}"
            - name: open-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "[CI Failure] {{repository}} / {{branch}} — {{failed_job}}"
                category: "software"
                priority: "3"
                description: "GitHub Actions run {{run_id}} failed on {{branch}} in {{repository}}. Job: {{failed_job}}."
            - name: alert-team
              type: call
              call: "msteams.send-message"
              with:
                channel: "engineering-alerts"
                text: "Pipeline Failure: {{repository}} | Branch: {{branch}} | Job: {{failed_job}} | Incident: {{open-incident.number}} | Run: https://github.com/{{repository}}/actions/runs/{{run_id}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      inputParameters:
        - name: DD-APPLICATION-KEY
          in: header
          value: "$secrets.datadog_app_key"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.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: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          operations:
            - name: send-message
              method: POST

Analyzes trend data in Snowflake, forecasts demand by category, creates collection plans in Jira, updates SAP materials, and notifies design team.

naftiko: "0.5"
info:
  label: "Collection Planning Pipeline"
  description: "Analyzes trend data in Snowflake, forecasts demand by category, creates collection plans in Jira, updates SAP materials, and notifies design team."
  tags:
    - design
    - snowflake
    - jira
    - sap
    - slack
capability:
  exposes:
    - type: mcp
      namespace: design
      port: 8080
      tools:
        - name: collection_planning_pipeline
          description: "Orchestrate collection planning pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-jira
              type: call
              call: "jira.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-sap
              type: call
              call: "sap.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://adidas.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira-op
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://adidas-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Validates product labels against regulatory databases, checks SAP material master data, creates compliance records, and notifies regulatory team.

naftiko: "0.5"
info:
  label: "Compliance Labeling Verification"
  description: "Validates product labels against regulatory databases, checks SAP material master data, creates compliance records, and notifies regulatory team."
  tags:
    - compliance
    - sap
    - servicenow
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: compliance_labeling_verification
          description: "Orchestrate compliance labeling verification workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-jira
              type: call
              call: "jira.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: sap
      baseUri: "https://adidas-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://adidas.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Retrieves Confluence page content for Adidas knowledge base.

naftiko: "0.5"
info:
  label: "Confluence Page Retrieval"
  description: "Retrieves Confluence page content for Adidas knowledge base."
  tags:
    - collaboration
    - confluence
    - documentation
capability:
  exposes:
    - type: mcp
      namespace: knowledge
      port: 8080
      tools:
        - name: get-page
          description: "Get page at Adidas."
          inputParameters:
            - name: page_id
              in: body
              type: string
              description: "The page_id to look up." 
          call: "confluence.get-page_id"
          with:
            page_id: "{{page_id}}"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://adidas.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: confluence_page_retrieval
              method: GET

Orchestrates creative asset production by uploading a design brief to Box, triggering an Adobe Creative Cloud workflow, and publishing the final asset to SharePoint and Notion.

naftiko: "0.5"
info:
  label: "Content Asset Production Pipeline"
  description: "Orchestrates creative asset production by uploading a design brief to Box, triggering an Adobe Creative Cloud workflow, and publishing the final asset to SharePoint and Notion."
  tags:
    - creative
    - content-production
    - box
    - adobe-creative-cloud
    - sharepoint
    - notion
capability:
  exposes:
    - type: mcp
      namespace: content-production
      port: 8080
      tools:
        - name: produce-asset
          description: "Given an asset brief, upload to Box, trigger creative workflow, and publish to SharePoint and Notion."
          inputParameters:
            - name: brief_title
              in: body
              type: string
              description: "Title of the creative brief."
            - name: campaign_name
              in: body
              type: string
              description: "The marketing campaign name."
            - name: asset_type
              in: body
              type: string
              description: "Type of asset (banner, video, social, email)."
          steps:
            - name: upload-brief
              type: call
              call: "box.upload-file"
              with:
                folder_id: "$secrets.creative_briefs_folder"
                file_name: "{{brief_title}}_brief.pdf"
                campaign: "{{campaign_name}}"
            - name: trigger-creative
              type: call
              call: "adobe-cc.start-workflow"
              with:
                workflow_template: "{{asset_type}}_production"
                brief_url: "{{upload-brief.shared_link}}"
                campaign: "{{campaign_name}}"
            - name: publish-sharepoint
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "marketing_assets"
                folder_path: "Campaigns/{{campaign_name}}/{{asset_type}}"
                file_url: "{{trigger-creative.output_url}}"
            - name: log-in-notion
              type: call
              call: "notion.create-page"
              with:
                parent_id: "$secrets.creative_tracker_db"
                title: "{{brief_title}}"
                properties_campaign: "{{campaign_name}}"
                properties_type: "{{asset_type}}"
                properties_sharepoint_url: "{{publish-sharepoint.url}}"
  consumes:
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files/content"
          operations:
            - name: upload-file
              method: POST
    - type: http
      namespace: adobe-cc
      baseUri: "https://cc-api.adobe.io/v1"
      authentication:
        type: bearer
        token: "$secrets.adobe_cc_token"
      resources:
        - name: workflows
          path: "/workflows"
          operations:
            - name: start-workflow
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: notion
      baseUri: "https://api.notion.com/v1"
      authentication:
        type: bearer
        token: "$secrets.notion_token"
      inputParameters:
        - name: Notion-Version
          in: header
          value: "2022-06-28"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST

Validates shipment data from SAP against trade regulations, checks denied party lists, creates compliance records, and notifies trade compliance team.

naftiko: "0.5"
info:
  label: "Cross-Border Trade Compliance"
  description: "Validates shipment data from SAP against trade regulations, checks denied party lists, creates compliance records, and notifies trade compliance team."
  tags:
    - trade-compliance
    - sap
    - servicenow
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: trade-compliance
      port: 8080
      tools:
        - name: cross_border_trade_compliance
          description: "Orchestrate cross-border trade compliance workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-jira
              type: call
              call: "jira.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: sap
      baseUri: "https://adidas-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://adidas.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

When a Zendesk ticket is resolved, sends a Google Forms satisfaction survey link, collects the response, and updates the Salesforce contact record with the CSAT score.

naftiko: "0.5"
info:
  label: "Customer Feedback Loop"
  description: "When a Zendesk ticket is resolved, sends a Google Forms satisfaction survey link, collects the response, and updates the Salesforce contact record with the CSAT score."
  tags:
    - customer-service
    - feedback
    - zendesk
    - google-forms
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: customer-feedback
      port: 8080
      tools:
        - name: trigger-feedback-survey
          description: "Given a resolved Zendesk ticket, send a satisfaction survey and route the score back to Salesforce."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The resolved Zendesk ticket ID."
            - name: customer_email
              in: body
              type: string
              description: "The customer email address."
            - name: salesforce_contact_id
              in: body
              type: string
              description: "The Salesforce contact ID."
          steps:
            - name: get-ticket
              type: call
              call: "zendesk.get-ticket"
              with:
                ticket_id: "{{ticket_id}}"
            - name: send-survey
              type: call
              call: "google-forms.send-form"
              with:
                form_id: "$secrets.csat_form_id"
                recipient_email: "{{customer_email}}"
                ticket_reference: "{{ticket_id}}"
            - name: update-salesforce
              type: call
              call: "salesforce.update-contact"
              with:
                contact_id: "{{salesforce_contact_id}}"
                last_survey_sent: "{{ticket_id}}"
                survey_type: "CSAT"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://adidas.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets/{{ticket_id}}.json"
          inputParameters:
            - name: ticket_id
              in: path
          operations:
            - name: get-ticket
              method: GET
    - type: http
      namespace: google-forms
      baseUri: "https://forms.googleapis.com/v1"
      authentication:
        type: bearer
        token: "$secrets.google_forms_token"
      resources:
        - name: forms
          path: "/forms/{{form_id}}/responses"
          inputParameters:
            - name: form_id
              in: path
          operations:
            - name: send-form
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://adidas.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact/{{contact_id}}"
          inputParameters:
            - name: contact_id
              in: path
          operations:
            - name: update-contact
              method: PATCH

Tracks touchpoints from Salesforce, web analytics from Datadog, purchase data from Stripe, aggregates in Snowflake, and notifies CX team.

naftiko: "0.5"
info:
  label: "Customer Journey Analytics Pipeline"
  description: "Tracks touchpoints from Salesforce, web analytics from Datadog, purchase data from Stripe, aggregates in Snowflake, and notifies CX team."
  tags:
    - customer-experience
    - salesforce
    - datadog
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: customer-experience
      port: 8080
      tools:
        - name: customer_journey_analytics_pipeline
          description: "Orchestrate customer journey analytics pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-salesforce
              type: call
              call: "salesforce.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-datadog
              type: call
              call: "datadog.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-snowflake
              type: call
              call: "snowflake.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://adidas.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        header: "DD-API-KEY" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: datadog-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Calculates loyalty points from Stripe transactions, updates member profile in Salesforce, triggers reward notification, and syncs to analytics.

naftiko: "0.5"
info:
  label: "Customer Loyalty Rewards Processor"
  description: "Calculates loyalty points from Stripe transactions, updates member profile in Salesforce, triggers reward notification, and syncs to analytics."
  tags:
    - loyalty
    - stripe
    - salesforce
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: loyalty
      port: 8080
      tools:
        - name: customer_loyalty_rewards_processor
          description: "Orchestrate customer loyalty rewards processor workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-stripe
              type: call
              call: "stripe.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-salesforce
              type: call
              call: "salesforce.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-snowflake
              type: call
              call: "snowflake.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: stripe-op
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://adidas.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

When a return request arrives in Zendesk, looks up the order in BigCommerce, initiates a refund via Stripe, updates the SAP inventory, and resolves the Zendesk ticket.

naftiko: "0.5"
info:
  label: "Customer Return Processing"
  description: "When a return request arrives in Zendesk, looks up the order in BigCommerce, initiates a refund via Stripe, updates the SAP inventory, and resolves the Zendesk ticket."
  tags:
    - customer-service
    - returns
    - zendesk
    - bigcommerce
    - stripe
    - sap-s4hana
capability:
  exposes:
    - type: mcp
      namespace: returns
      port: 8080
      tools:
        - name: process-return
          description: "Given a Zendesk ticket ID and order ID, process the full return including refund and inventory adjustment."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The Zendesk ticket ID for the return request."
            - name: order_id
              in: body
              type: string
              description: "The BigCommerce order ID."
            - name: reason
              in: body
              type: string
              description: "Return reason code."
          steps:
            - name: get-order
              type: call
              call: "bigcommerce.get-order"
              with:
                order_id: "{{order_id}}"
            - name: process-refund
              type: call
              call: "stripe.create-refund"
              with:
                payment_intent_id: "{{get-order.payment_reference}}"
                amount: "{{get-order.total_inc_tax}}"
                reason: "{{reason}}"
            - name: update-inventory
              type: call
              call: "sap.post-goods-receipt"
              with:
                sku: "{{get-order.line_items[0].sku}}"
                quantity: "{{get-order.line_items[0].quantity}}"
                movement_type: "RETURN"
            - name: resolve-ticket
              type: call
              call: "zendesk.update-ticket"
              with:
                ticket_id: "{{ticket_id}}"
                status: "solved"
                comment: "Return processed. Refund: {{process-refund.id}} ({{process-refund.amount}}). Inventory updated."
  consumes:
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/adidas/v2"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: refunds
          path: "/refunds"
          operations:
            - name: create-refund
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://adidas-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_DOCUMENT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: material-documents
          path: "/A_MaterialDocumentHeader"
          operations:
            - name: post-goods-receipt
              method: POST
    - type: http
      namespace: zendesk
      baseUri: "https://adidas.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets/{{ticket_id}}.json"
          inputParameters:
            - name: ticket_id
              in: path
          operations:
            - name: update-ticket
              method: PUT

Detects high-priority Zendesk tickets, enriches with customer data from Salesforce, creates escalation in ServiceNow, and notifies management.

naftiko: "0.5"
info:
  label: "Customer Service Escalation Pipeline"
  description: "Detects high-priority Zendesk tickets, enriches with customer data from Salesforce, creates escalation in ServiceNow, and notifies management."
  tags:
    - customer-service
    - zendesk
    - salesforce
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: customer-service
      port: 8080
      tools:
        - name: customer_service_escalation_pipeline
          description: "Orchestrate customer service escalation pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-zendesk
              type: call
              call: "zendesk.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-salesforce
              type: call
              call: "salesforce.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://adidas.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: zendesk-op
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://adidas.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

When an Apache Spark job fails, logs the failure in Datadog, opens a ServiceNow incident, and notifies the data engineering team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Data Pipeline Failure Handler"
  description: "When an Apache Spark job fails, logs the failure in Datadog, opens a ServiceNow incident, and notifies the data engineering team in Microsoft Teams."
  tags:
    - data-engineering
    - apache-spark
    - datadog
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: data-ops
      port: 8080
      tools:
        - name: handle-spark-failure
          description: "Given a Spark application ID and error details, create observability event, incident, and team alert."
          inputParameters:
            - name: application_id
              in: body
              type: string
              description: "The Spark application ID."
            - name: job_name
              in: body
              type: string
              description: "The name of the failed Spark job."
            - name: error_message
              in: body
              type: string
              description: "The error message from the failure."
          steps:
            - name: log-event
              type: call
              call: "datadog.create-event"
              with:
                title: "Spark Job Failure: {{job_name}}"
                text: "App: {{application_id}} | Error: {{error_message}}"
                alert_type: "error"
                tags: "spark,job:{{job_name}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "[Data Pipeline] Spark job failed: {{job_name}}"
                category: "data_engineering"
                priority: "2"
                description: "Application: {{application_id}}\nJob: {{job_name}}\nError: {{error_message}}"
            - name: alert-team
              type: call
              call: "msteams.send-message"
              with:
                channel: "data-engineering-alerts"
                text: "Spark Failure: {{job_name}} | App: {{application_id}} | Error: {{error_message}} | Incident: {{create-incident.number}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      inputParameters:
        - name: DD-APPLICATION-KEY
          in: header
          value: "$secrets.datadog_app_key"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.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: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          operations:
            - name: send-message
              method: POST

Retrieves Datadog monitor status for Adidas infrastructure.

naftiko: "0.5"
info:
  label: "Datadog Monitor Status"
  description: "Retrieves Datadog monitor status for Adidas infrastructure."
  tags:
    - monitoring
    - datadog
    - alerting
capability:
  exposes:
    - type: mcp
      namespace: observability
      port: 8080
      tools:
        - name: get-monitor
          description: "Check monitor at Adidas."
          inputParameters:
            - name: monitor_id
              in: body
              type: string
              description: "The monitor_id to look up." 
          call: "datadog.get-monitor_id"
          with:
            monitor_id: "{{monitor_id}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        header: "DD-API-KEY" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: datadog_monitor_status
              method: GET

Fetches the current health status and error rate for a specified Adidas microservice from Datadog. Used by platform engineering and SRE teams.

naftiko: "0.5"
info:
  label: "Datadog Service Health Check"
  description: "Fetches the current health status and error rate for a specified Adidas microservice from Datadog. Used by platform engineering and SRE teams."
  tags:
    - observability
    - datadog
    - sre
capability:
  exposes:
    - type: mcp
      namespace: observability
      port: 8080
      tools:
        - name: get-service-health
          description: "Query Datadog for the current health status, error rate, and latency of a given service."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The Datadog service name to query."
          call: "datadog.get-service-summary"
          with:
            service_name: "{{service_name}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.data.attributes.status"
            - name: error_rate
              type: string
              mapping: "$.data.attributes.error_rate"
            - name: avg_latency_ms
              type: string
              mapping: "$.data.attributes.avg_latency"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      inputParameters:
        - name: DD-APPLICATION-KEY
          in: header
          value: "$secrets.datadog_app_key"
      resources:
        - name: services
          path: "/services/{{service_name}}"
          inputParameters:
            - name: service_name
              in: path
          operations:
            - name: get-service-summary
              method: GET

Monitors product listings across e-commerce channels, tracks pricing and availability, logs discrepancies, and alerts the digital commerce team.

naftiko: "0.5"
info:
  label: "Digital Shelf Monitoring Pipeline"
  description: "Monitors product listings across e-commerce channels, tracks pricing and availability, logs discrepancies, and alerts the digital commerce team."
  tags:
    - e-commerce
    - datadog
    - snowflake
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: e-commerce
      port: 8080
      tools:
        - name: digital_shelf_monitoring_pipeline
          description: "Orchestrate digital shelf monitoring pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-datadog
              type: call
              call: "datadog.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-jira
              type: call
              call: "jira.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        header: "DD-API-KEY" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: datadog-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://adidas.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Fetches open problems from Dynatrace for a given management zone and returns problem titles, severity levels, and impacted entities.

naftiko: "0.5"
info:
  label: "Dynatrace Problem Query"
  description: "Fetches open problems from Dynatrace for a given management zone and returns problem titles, severity levels, and impacted entities."
  tags:
    - observability
    - dynatrace
    - incident-management
capability:
  exposes:
    - type: mcp
      namespace: apm
      port: 8080
      tools:
        - name: get-open-problems
          description: "Query Dynatrace for open problems in a management zone, returning severity and impacted entities."
          inputParameters:
            - name: management_zone
              in: body
              type: string
              description: "The Dynatrace management zone name."
          call: "dynatrace.list-problems"
          with:
            management_zone: "{{management_zone}}"
          outputParameters:
            - name: total_count
              type: string
              mapping: "$.totalCount"
            - name: problems
              type: string
              mapping: "$.problems"
  consumes:
    - type: http
      namespace: dynatrace
      baseUri: "https://adidas.live.dynatrace.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.dynatrace_token"
      resources:
        - name: problems
          path: "/problems"
          inputParameters:
            - name: problemSelector
              in: query
              value: "managementZoneIds({{management_zone}}),status(OPEN)"
          operations:
            - name: list-problems
              method: GET

Retrieves experiment results from Google Optimize and Adobe Analytics, consolidates them, and posts findings to a Notion knowledge base page.

naftiko: "0.5"
info:
  label: "E-Commerce A/B Test Result Collector"
  description: "Retrieves experiment results from Google Optimize and Adobe Analytics, consolidates them, and posts findings to a Notion knowledge base page."
  tags:
    - experimentation
    - google-optimize
    - adobe-analytics
    - notion
capability:
  exposes:
    - type: mcp
      namespace: experimentation
      port: 8080
      tools:
        - name: collect-ab-results
          description: "Given an experiment ID, collect results from Google Optimize and Adobe Analytics and write the summary to Notion."
          inputParameters:
            - name: experiment_id
              in: body
              type: string
              description: "The Google Optimize experiment ID."
            - name: report_suite_id
              in: body
              type: string
              description: "The Adobe Analytics report suite ID."
            - name: notion_page_id
              in: body
              type: string
              description: "The Notion page ID where results will be appended."
          steps:
            - name: get-optimize-results
              type: call
              call: "google-optimize.get-experiment"
              with:
                experiment_id: "{{experiment_id}}"
            - name: get-adobe-segment
              type: call
              call: "adobe-analytics.get-segment-report"
              with:
                report_suite_id: "{{report_suite_id}}"
                experiment_id: "{{experiment_id}}"
            - name: write-to-notion
              type: call
              call: "notion.append-block"
              with:
                page_id: "{{notion_page_id}}"
                content: "Experiment: {{experiment_id}} | Winner: {{get-optimize-results.winner_variant}} | Lift: {{get-optimize-results.improvement_pct}}% | Revenue Impact: {{get-adobe-segment.revenue_delta}} | Confidence: {{get-optimize-results.confidence}}%"
  consumes:
    - type: http
      namespace: google-optimize
      baseUri: "https://www.googleapis.com/analytics/v3/management"
      authentication:
        type: bearer
        token: "$secrets.google_optimize_token"
      resources:
        - name: experiments
          path: "/accounts/adidas/webproperties/UA-XXXXX/profiles/YYYYY/experiments/{{experiment_id}}"
          inputParameters:
            - name: experiment_id
              in: path
          operations:
            - name: get-experiment
              method: GET
    - type: http
      namespace: adobe-analytics
      baseUri: "https://analytics.adobe.io/api/adidas/reports"
      authentication:
        type: bearer
        token: "$secrets.adobe_analytics_token"
      inputParameters:
        - name: x-api-key
          in: header
          value: "$secrets.adobe_client_id"
      resources:
        - name: reports
          path: "/ranked"
          operations:
            - name: get-segment-report
              method: POST
    - type: http
      namespace: notion
      baseUri: "https://api.notion.com/v1"
      authentication:
        type: bearer
        token: "$secrets.notion_token"
      inputParameters:
        - name: Notion-Version
          in: header
          value: "2022-06-28"
      resources:
        - name: blocks
          path: "/blocks/{{page_id}}/children"
          inputParameters:
            - name: page_id
              in: path
          operations:
            - name: append-block
              method: PATCH

Monitors checkout funnel in Datadog, analyzes drop-off in Snowflake, runs A/B test analysis, creates Jira improvements, and notifies product team.

naftiko: "0.5"
info:
  label: "E-Commerce Checkout Optimization"
  description: "Monitors checkout funnel in Datadog, analyzes drop-off in Snowflake, runs A/B test analysis, creates Jira improvements, and notifies product team."
  tags:
    - e-commerce
    - datadog
    - snowflake
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: e-commerce
      port: 8080
      tools:
        - name: e_commerce_checkout_optimization
          description: "Orchestrate e-commerce checkout optimization workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-datadog
              type: call
              call: "datadog.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-jira
              type: call
              call: "jira.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        header: "DD-API-KEY" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: datadog-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://adidas.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Monitors transactions from Stripe, runs fraud scoring in Snowflake, blocks suspicious orders, creates cases in ServiceNow, and alerts fraud team.

naftiko: "0.5"
info:
  label: "E-Commerce Fraud Detection Pipeline"
  description: "Monitors transactions from Stripe, runs fraud scoring in Snowflake, blocks suspicious orders, creates cases in ServiceNow, and alerts fraud team."
  tags:
    - fraud
    - stripe
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: fraud
      port: 8080
      tools:
        - name: e_commerce_fraud_detection_pipeline
          description: "Orchestrate e-commerce fraud detection pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-stripe
              type: call
              call: "stripe.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: stripe-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

When an order is placed on BigCommerce, checks SAP inventory, creates a shipment in SAP S/4HANA, and notifies the customer via Zendesk with tracking details.

naftiko: "0.5"
info:
  label: "E-Commerce Order Fulfillment Tracker"
  description: "When an order is placed on BigCommerce, checks SAP inventory, creates a shipment in SAP S/4HANA, and notifies the customer via Zendesk with tracking details."
  tags:
    - ecommerce
    - fulfillment
    - bigcommerce
    - sap-s4hana
    - zendesk
capability:
  exposes:
    - type: mcp
      namespace: order-fulfillment
      port: 8080
      tools:
        - name: fulfill-order
          description: "Given a BigCommerce order ID and customer email, verify inventory, create a shipment, and send tracking info to the customer."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The BigCommerce order ID."
            - name: customer_email
              in: body
              type: string
              description: "The customer email address for notification."
          steps:
            - name: get-order
              type: call
              call: "bigcommerce.get-order"
              with:
                order_id: "{{order_id}}"
            - name: check-inventory
              type: call
              call: "sap.check-availability"
              with:
                sku: "{{get-order.line_items[0].sku}}"
                quantity: "{{get-order.line_items[0].quantity}}"
            - name: create-shipment
              type: call
              call: "sap.create-delivery"
              with:
                order_reference: "{{order_id}}"
                sku: "{{get-order.line_items[0].sku}}"
                ship_to: "{{get-order.shipping_address}}"
            - name: notify-customer
              type: call
              call: "zendesk.create-ticket"
              with:
                requester_email: "{{customer_email}}"
                subject: "Your Adidas order {{order_id}} has shipped!"
                body: "Tracking number: {{create-shipment.tracking_number}}. Estimated delivery: {{create-shipment.estimated_delivery}}."
  consumes:
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/adidas/v2"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://adidas-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: availability
          path: "/A_MaterialStock"
          operations:
            - name: check-availability
              method: GET
        - name: deliveries
          path: "/A_OutbDeliveryHeader"
          operations:
            - name: create-delivery
              method: POST
    - type: http
      namespace: zendesk
      baseUri: "https://adidas.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets.json"
          operations:
            - name: create-ticket
              method: POST

Searches Elasticsearch indexes for Adidas.

naftiko: "0.5"
info:
  label: "Elasticsearch Log Query"
  description: "Searches Elasticsearch indexes for Adidas."
  tags:
    - data
    - elasticsearch
    - search
capability:
  exposes:
    - type: mcp
      namespace: search
      port: 8080
      tools:
        - name: search-logs
          description: "Search ES logs at Adidas."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "The query to look up." 
          call: "elasticsearch.get-query"
          with:
            query: "{{query}}"
  consumes:
    - type: http
      namespace: elasticsearch
      baseUri: "https://adidas-es.com:9200"
      authentication:
        type: bearer
        token: "$secrets.elasticsearch_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: elasticsearch_log_query
              method: GET

Searches the Adidas product catalog index in Elasticsearch by keyword and returns matching product names, prices, and availability.

naftiko: "0.5"
info:
  label: "Elasticsearch Product Search"
  description: "Searches the Adidas product catalog index in Elasticsearch by keyword and returns matching product names, prices, and availability."
  tags:
    - search
    - elasticsearch
    - product-catalog
capability:
  exposes:
    - type: mcp
      namespace: product-search
      port: 8080
      tools:
        - name: search-products
          description: "Search the product catalog by keyword and return matching products with prices and availability."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "Free-text search query for products."
            - name: limit
              in: body
              type: string
              description: "Maximum number of results to return."
          call: "elasticsearch.search"
          with:
            query: "{{query}}"
            limit: "{{limit}}"
          outputParameters:
            - name: total_hits
              type: string
              mapping: "$.hits.total.value"
            - name: products
              type: string
              mapping: "$.hits.hits"
  consumes:
    - type: http
      namespace: elasticsearch
      baseUri: "https://es.adidas.internal:9200"
      authentication:
        type: basic
        username: "$secrets.es_user"
        password: "$secrets.es_password"
      resources:
        - name: product-index
          path: "/products/_search"
          operations:
            - name: search
              method: POST

On new hire creation in PeopleSoft, provisions a SharePoint folder, sends a Microsoft Teams welcome message, and creates an onboarding ticket in ServiceNow.

naftiko: "0.5"
info:
  label: "Employee Onboarding Orchestrator"
  description: "On new hire creation in PeopleSoft, provisions a SharePoint folder, sends a Microsoft Teams welcome message, and creates an onboarding ticket in ServiceNow."
  tags:
    - hr
    - onboarding
    - peoplesoft
    - sharepoint
    - microsoft-teams
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Given a PeopleSoft employee ID and start date, orchestrate the full onboarding sequence."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The PeopleSoft employee ID."
            - name: start_date
              in: body
              type: string
              description: "The start date in YYYY-MM-DD format."
            - name: department
              in: body
              type: string
              description: "The department the new hire is joining."
          steps:
            - name: get-employee
              type: call
              call: "peoplesoft.get-employee"
              with:
                employee_id: "{{employee_id}}"
            - name: provision-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "hr_onboarding"
                folder_path: "OnboardingDocs/{{get-employee.full_name}}_{{start_date}}"
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Onboarding: {{get-employee.full_name}} — {{department}}"
                category: "hr_onboarding"
                assigned_group: "IT_Onboarding"
                description: "New hire {{get-employee.full_name}} starting {{start_date}} in {{department}}."
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.work_email}}"
                text: "Welcome to Adidas, {{get-employee.first_name}}! IT ticket: {{create-ticket.number}}. Your docs folder: {{provision-folder.url}}."
  consumes:
    - type: http
      namespace: peoplesoft
      baseUri: "https://peoplesoft.adidas.com/psftapi/v1"
      authentication:
        type: basic
        username: "$secrets.peoplesoft_user"
        password: "$secrets.peoplesoft_password"
      resources:
        - name: employees
          path: "/employees/{{employee_id}}"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-employee
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.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: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Tracks program participation from Workday, calculates engagement in Snowflake, updates Power BI reports, and notifies HR team.

naftiko: "0.5"
info:
  label: "Employee Wellness Program Pipeline"
  description: "Tracks program participation from Workday, calculates engagement in Snowflake, updates Power BI reports, and notifies HR team."
  tags:
    - hr
    - workday
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: employee_wellness_program_pipeline
          description: "Orchestrate employee wellness program pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-workday
              type: call
              call: "workday.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/adidas"
      authentication:
        type: bearer
        token: "$secrets.workday_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: workday-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST

Creates a Salesforce campaign for a sponsored event, uploads the sponsorship agreement to Google Drive, schedules social media posts on Instagram and Twitter, and sets up a Planner task for follow-up.

naftiko: "0.5"
info:
  label: "Event Sponsorship Tracker"
  description: "Creates a Salesforce campaign for a sponsored event, uploads the sponsorship agreement to Google Drive, schedules social media posts on Instagram and Twitter, and sets up a Planner task for follow-up."
  tags:
    - marketing
    - events
    - salesforce
    - google-drive
    - instagram
    - twitter
    - microsoft-planner
capability:
  exposes:
    - type: mcp
      namespace: event-sponsorship
      port: 8080
      tools:
        - name: setup-sponsorship
          description: "Given event details and sponsorship terms, create campaign, store agreement, schedule social posts, and track follow-up."
          inputParameters:
            - name: event_name
              in: body
              type: string
              description: "Name of the sponsored event."
            - name: event_date
              in: body
              type: string
              description: "Event date in YYYY-MM-DD format."
            - name: sponsorship_amount
              in: body
              type: string
              description: "Sponsorship investment amount."
            - name: sport_category
              in: body
              type: string
              description: "Sport category for the event."
          steps:
            - name: create-campaign
              type: call
              call: "salesforce.create-campaign"
              with:
                name: "Sponsorship: {{event_name}}"
                type: "Event"
                start_date: "{{event_date}}"
                budgeted_cost: "{{sponsorship_amount}}"
            - name: upload-agreement
              type: call
              call: "gdrive.upload-file"
              with:
                folder_id: "$secrets.sponsorships_folder"
                file_name: "{{event_name}}_agreement.pdf"
            - name: schedule-instagram
              type: call
              call: "instagram.create-media"
              with:
                caption: "We're proud to sponsor {{event_name}}! See you there. #adidas #{{sport_category}}"
                scheduled_date: "{{event_date}}"
            - name: schedule-twitter
              type: call
              call: "twitter.create-tweet"
              with:
                text: "Adidas is the official sponsor of {{event_name}}. Game on. #adidas #{{sport_category}}"
            - name: create-followup-task
              type: call
              call: "planner.create-task"
              with:
                plan_id: "$secrets.events_plan_id"
                title: "Post-event report: {{event_name}}"
                due_date: "+7d"
                description: "Campaign: {{create-campaign.id}} | Agreement: {{upload-agreement.url}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://adidas.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: campaigns
          path: "/sobjects/Campaign"
          operations:
            - name: create-campaign
              method: POST
    - type: http
      namespace: gdrive
      baseUri: "https://www.googleapis.com/upload/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_drive_token"
      resources:
        - name: files
          path: "/files"
          operations:
            - name: upload-file
              method: POST
    - type: http
      namespace: instagram
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: media
          path: "/{{ig_user_id}}/media"
          operations:
            - name: create-media
              method: POST
    - type: http
      namespace: twitter
      baseUri: "https://api.twitter.com/2"
      authentication:
        type: bearer
        token: "$secrets.twitter_bearer_token"
      resources:
        - name: tweets
          path: "/tweets"
          operations:
            - name: create-tweet
              method: POST
    - type: http
      namespace: planner
      baseUri: "https://graph.microsoft.com/v1.0/planner"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: tasks
          path: "/tasks"
          operations:
            - name: create-task
              method: POST

Retrieves GitHub repository metadata for Adidas.

naftiko: "0.5"
info:
  label: "GitHub Repository Lookup"
  description: "Retrieves GitHub repository metadata for Adidas."
  tags:
    - devops
    - github
    - source-control
capability:
  exposes:
    - type: mcp
      namespace: engineering
      port: 8080
      tools:
        - name: get-repo
          description: "Look up repo at Adidas."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "The repo_name to look up." 
          call: "github.get-repo_name"
          with:
            repo_name: "{{repo_name}}"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: github_repository_lookup
              method: GET

Exports a GitLab project's issues and pipelines, creates corresponding work items in Azure DevOps, and logs the migration progress in a Google Sheet.

naftiko: "0.5"
info:
  label: "GitLab to Azure DevOps Migration Tracker"
  description: "Exports a GitLab project's issues and pipelines, creates corresponding work items in Azure DevOps, and logs the migration progress in a Google Sheet."
  tags:
    - devops
    - migration
    - gitlab
    - azure-devops
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: devops-migration
      port: 8080
      tools:
        - name: migrate-project
          description: "Given a GitLab project ID and Azure DevOps project, migrate issues and pipeline config and track progress."
          inputParameters:
            - name: gitlab_project_id
              in: body
              type: string
              description: "The GitLab project ID."
            - name: azdo_project
              in: body
              type: string
              description: "The Azure DevOps project name."
            - name: tracker_sheet_id
              in: body
              type: string
              description: "Google Sheets ID for migration tracking."
          steps:
            - name: export-issues
              type: call
              call: "gitlab.list-issues"
              with:
                project_id: "{{gitlab_project_id}}"
            - name: create-work-items
              type: call
              call: "azdo.create-work-item"
              with:
                project: "{{azdo_project}}"
                type: "User Story"
                title: "Migrated from GitLab: {{export-issues.title}}"
                description: "{{export-issues.description}}"
            - name: log-progress
              type: call
              call: "gsheets.append-row"
              with:
                spreadsheet_id: "{{tracker_sheet_id}}"
                range: "Migration!A1"
                values: "{{gitlab_project_id}},{{azdo_project}},{{export-issues.total_count}},{{create-work-items.count}},completed"
  consumes:
    - type: http
      namespace: gitlab
      baseUri: "https://gitlab.adidas.com/api/v4"
      authentication:
        type: bearer
        token: "$secrets.gitlab_token"
      resources:
        - name: issues
          path: "/projects/{{project_id}}/issues"
          inputParameters:
            - name: project_id
              in: path
          operations:
            - name: list-issues
              method: GET
    - type: http
      namespace: azdo
      baseUri: "https://dev.azure.com/adidas"
      authentication:
        type: basic
        username: ""
        password: "$secrets.azdo_pat"
      resources:
        - name: work-items
          path: "/{{project}}/_apis/wit/workitems/$User Story"
          inputParameters:
            - name: project
              in: path
          operations:
            - name: create-work-item
              method: POST
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: values
          path: "/{{spreadsheet_id}}/values/{{range}}:append"
          inputParameters:
            - name: spreadsheet_id
              in: path
            - name: range
              in: path
          operations:
            - name: append-row
              method: POST

Pulls a summary report from Google Analytics for a specified campaign, returning sessions, conversion rate, and revenue attribution.

naftiko: "0.5"
info:
  label: "Google Analytics Campaign Report"
  description: "Pulls a summary report from Google Analytics for a specified campaign, returning sessions, conversion rate, and revenue attribution."
  tags:
    - marketing
    - google-analytics
    - campaign
capability:
  exposes:
    - type: mcp
      namespace: marketing-analytics
      port: 8080
      tools:
        - name: get-campaign-report
          description: "Retrieve a Google Analytics campaign performance summary including sessions, conversions, and revenue."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The Google Analytics campaign ID."
            - name: date_range
              in: body
              type: string
              description: "Date range in YYYY-MM-DD/YYYY-MM-DD format."
          call: "ga.get-report"
          with:
            campaign_id: "{{campaign_id}}"
            date_range: "{{date_range}}"
          outputParameters:
            - name: sessions
              type: string
              mapping: "$.rows[0].metricValues[0].value"
            - name: conversion_rate
              type: string
              mapping: "$.rows[0].metricValues[1].value"
            - name: revenue
              type: string
              mapping: "$.rows[0].metricValues[2].value"
  consumes:
    - type: http
      namespace: ga
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/properties/{{campaign_id}}:runReport"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: get-report
              method: POST

Queries Grafana dashboard data for Adidas monitoring.

naftiko: "0.5"
info:
  label: "Grafana Dashboard Query"
  description: "Queries Grafana dashboard data for Adidas monitoring."
  tags:
    - monitoring
    - grafana
    - dashboards
capability:
  exposes:
    - type: mcp
      namespace: monitoring
      port: 8080
      tools:
        - name: get-dashboard
          description: "Query dashboard at Adidas."
          inputParameters:
            - name: dashboard_uid
              in: body
              type: string
              description: "The dashboard_uid to look up." 
          call: "grafana.get-dashboard_uid"
          with:
            dashboard_uid: "{{dashboard_uid}}"
  consumes:
    - type: http
      namespace: grafana
      baseUri: "https://adidas-grafana.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_api_key" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: grafana_dashboard_query
              method: GET

Retrieves a HubSpot CRM contact by email address and returns lifecycle stage, last activity date, and deal associations.

naftiko: "0.5"
info:
  label: "HubSpot Contact Lookup"
  description: "Retrieves a HubSpot CRM contact by email address and returns lifecycle stage, last activity date, and deal associations."
  tags:
    - crm
    - hubspot
    - contacts
capability:
  exposes:
    - type: mcp
      namespace: crm
      port: 8080
      tools:
        - name: get-contact-by-email
          description: "Look up a HubSpot contact by email and return lifecycle stage, last activity, and associated deals."
          inputParameters:
            - name: email
              in: body
              type: string
              description: "The contact email address."
          call: "hubspot.get-contact"
          with:
            email: "{{email}}"
          outputParameters:
            - name: lifecycle_stage
              type: string
              mapping: "$.properties.lifecyclestage"
            - name: last_activity
              type: string
              mapping: "$.properties.notes_last_updated"
            - name: deal_count
              type: string
              mapping: "$.properties.num_associated_deals"
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/crm/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/objects/contacts/{{email}}"
          inputParameters:
            - name: email
              in: path
            - name: idProperty
              in: query
              value: "email"
          operations:
            - name: get-contact
              method: GET

Collects influencer metrics from social APIs, calculates ROI in Snowflake, updates HubSpot campaigns, and notifies the brand team.

naftiko: "0.5"
info:
  label: "Influencer Campaign ROI Calculator"
  description: "Collects influencer metrics from social APIs, calculates ROI in Snowflake, updates HubSpot campaigns, and notifies the brand team."
  tags:
    - marketing
    - hubspot
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: marketing
      port: 8080
      tools:
        - name: influencer_campaign_roi_calculator
          description: "Orchestrate influencer campaign roi calculator workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-hubspot
              type: call
              call: "hubspot.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: hubspot-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST

Looks up a potential influencer on LinkedIn and ZoomInfo, creates a Salesforce opportunity, drafts an outreach email in Adobe Campaign, and tracks the engagement in HubSpot.

naftiko: "0.5"
info:
  label: "Influencer Collaboration Workflow"
  description: "Looks up a potential influencer on LinkedIn and ZoomInfo, creates a Salesforce opportunity, drafts an outreach email in Adobe Campaign, and tracks the engagement in HubSpot."
  tags:
    - marketing
    - influencer
    - linkedin
    - zoominfo
    - salesforce
    - adobe-campaign
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: influencer-marketing
      port: 8080
      tools:
        - name: initiate-collaboration
          description: "Given an influencer name and social handle, research them, create a sales opportunity, and start outreach."
          inputParameters:
            - name: influencer_name
              in: body
              type: string
              description: "Full name of the influencer."
            - name: social_handle
              in: body
              type: string
              description: "Primary social media handle."
            - name: campaign_name
              in: body
              type: string
              description: "The marketing campaign for this collaboration."
          steps:
            - name: lookup-linkedin
              type: call
              call: "linkedin.search-person"
              with:
                name: "{{influencer_name}}"
            - name: enrich-contact
              type: call
              call: "zoominfo.enrich-person"
              with:
                name: "{{influencer_name}}"
                social_handle: "{{social_handle}}"
            - name: create-opportunity
              type: call
              call: "salesforce.create-opportunity"
              with:
                name: "Influencer Collab: {{influencer_name}} — {{campaign_name}}"
                stage: "Prospecting"
                description: "LinkedIn: {{lookup-linkedin.profile_url}} | Followers: {{enrich-contact.follower_count}} | Engagement Rate: {{enrich-contact.engagement_rate}}"
            - name: create-outreach
              type: call
              call: "adobe-campaign.create-delivery"
              with:
                template: "influencer_outreach_v1"
                recipient_email: "{{enrich-contact.email}}"
                campaign_name: "{{campaign_name}}"
            - name: create-hubspot-contact
              type: call
              call: "hubspot.create-contact"
              with:
                email: "{{enrich-contact.email}}"
                firstname: "{{influencer_name}}"
                company: "Influencer"
                lifecyclestage: "lead"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: people
          path: "/people"
          operations:
            - name: search-person
              method: GET
    - type: http
      namespace: zoominfo
      baseUri: "https://api.zoominfo.com"
      authentication:
        type: bearer
        token: "$secrets.zoominfo_token"
      resources:
        - name: enrich
          path: "/enrich/person"
          operations:
            - name: enrich-person
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://adidas.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity"
          operations:
            - name: create-opportunity
              method: POST
    - type: http
      namespace: adobe-campaign
      baseUri: "https://mc.adobe.io/adidas/campaign"
      authentication:
        type: bearer
        token: "$secrets.adobe_campaign_token"
      resources:
        - name: deliveries
          path: "/deliveries"
          operations:
            - name: create-delivery
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com/crm/v3"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/objects/contacts"
          operations:
            - name: create-contact
              method: POST

When Prometheus alerts on high CPU, scales the Azure Kubernetes Service cluster, creates a Datadog annotation, and posts a status update to Microsoft Teams.

naftiko: "0.5"
info:
  label: "Infrastructure Scaling Automation"
  description: "When Prometheus alerts on high CPU, scales the Azure Kubernetes Service cluster, creates a Datadog annotation, and posts a status update to Microsoft Teams."
  tags:
    - infrastructure
    - autoscaling
    - prometheus
    - azure-kubernetes-service
    - datadog
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: infra-scaling
      port: 8080
      tools:
        - name: auto-scale-cluster
          description: "Given a cluster name and target node count, scale the AKS cluster, annotate Datadog, and notify the team."
          inputParameters:
            - name: cluster_name
              in: body
              type: string
              description: "The AKS cluster name."
            - name: target_node_count
              in: body
              type: string
              description: "Desired number of nodes."
            - name: trigger_metric
              in: body
              type: string
              description: "The Prometheus metric that triggered the scaling."
          steps:
            - name: scale-cluster
              type: call
              call: "aks.scale-nodepool"
              with:
                cluster_name: "{{cluster_name}}"
                node_count: "{{target_node_count}}"
            - name: annotate-datadog
              type: call
              call: "datadog.create-event"
              with:
                title: "AKS Auto-Scale: {{cluster_name}}"
                text: "Scaled to {{target_node_count}} nodes. Trigger: {{trigger_metric}}"
                alert_type: "info"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel: "platform-ops"
                text: "Auto-Scale Complete: {{cluster_name}} scaled to {{target_node_count}} nodes. Trigger: {{trigger_metric}}. Datadog event: {{annotate-datadog.id}}"
  consumes:
    - type: http
      namespace: aks
      baseUri: "https://management.azure.com/subscriptions/$secrets.azure_subscription_id/resourceGroups"
      authentication:
        type: bearer
        token: "$secrets.azure_token"
      resources:
        - name: nodepools
          path: "/adidas-rg/providers/Microsoft.ContainerService/managedClusters/{{cluster_name}}/agentPools/default"
          inputParameters:
            - name: cluster_name
              in: path
          operations:
            - name: scale-nodepool
              method: PUT
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      inputParameters:
        - name: DD-APPLICATION-KEY
          in: header
          value: "$secrets.datadog_app_key"
      resources:
        - name: events
          path: "/events"
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          operations:
            - name: send-message
              method: POST

Retrieves Jira issue status for Adidas engineering teams.

naftiko: "0.5"
info:
  label: "Jira Issue Status"
  description: "Retrieves Jira issue status for Adidas engineering teams."
  tags:
    - devops
    - jira
    - project-management
capability:
  exposes:
    - type: mcp
      namespace: engineering
      port: 8080
      tools:
        - name: get-issue
          description: "Look up Jira issue at Adidas."
          inputParameters:
            - name: issue_key
              in: body
              type: string
              description: "The issue_key to look up." 
          call: "jira.get-issue_key"
          with:
            issue_key: "{{issue_key}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://adidas.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira_issue_status
              method: GET

Drafts a support article from a resolved Zendesk ticket, publishes it to Notion, and shares the link in a Microsoft Teams support channel.

naftiko: "0.5"
info:
  label: "Knowledge Base Article Publisher"
  description: "Drafts a support article from a resolved Zendesk ticket, publishes it to Notion, and shares the link in a Microsoft Teams support channel."
  tags:
    - knowledge-management
    - zendesk
    - notion
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: knowledge-base
      port: 8080
      tools:
        - name: publish-kb-article
          description: "Given a resolved Zendesk ticket ID, extract the resolution, publish to Notion, and share in Teams."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The Zendesk ticket ID with the resolution to publish."
            - name: category
              in: body
              type: string
              description: "The knowledge base category (e.g. shipping, returns, product-info)."
          steps:
            - name: get-ticket
              type: call
              call: "zendesk.get-ticket"
              with:
                ticket_id: "{{ticket_id}}"
            - name: create-article
              type: call
              call: "notion.create-page"
              with:
                parent_id: "$secrets.kb_database_id"
                title: "{{get-ticket.subject}}"
                properties_category: "{{category}}"
                content: "{{get-ticket.resolution_notes}}"
            - name: share-article
              type: call
              call: "msteams.send-message"
              with:
                channel: "customer-support"
                text: "New KB Article: {{get-ticket.subject}} | Category: {{category}} | Link: {{create-article.url}} | Source: Ticket #{{ticket_id}}"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://adidas.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets/{{ticket_id}}.json"
          inputParameters:
            - name: ticket_id
              in: path
          operations:
            - name: get-ticket
              method: GET
    - type: http
      namespace: notion
      baseUri: "https://api.notion.com/v1"
      authentication:
        type: bearer
        token: "$secrets.notion_token"
      inputParameters:
        - name: Notion-Version
          in: header
          value: "2022-06-28"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          operations:
            - name: send-message
              method: POST

Pulls campaign spend from Adobe Campaign, payment data from Stripe, and reconciles against the budget in SAP BW, then updates a Microsoft Excel tracker on SharePoint.

naftiko: "0.5"
info:
  label: "Marketing Budget Tracker Sync"
  description: "Pulls campaign spend from Adobe Campaign, payment data from Stripe, and reconciles against the budget in SAP BW, then updates a Microsoft Excel tracker on SharePoint."
  tags:
    - finance
    - marketing
    - adobe-campaign
    - stripe
    - sap-bw
    - microsoft-excel
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: budget-tracking
      port: 8080
      tools:
        - name: sync-marketing-budget
          description: "Given a campaign ID and fiscal period, pull spend data from all channels and reconcile against budget."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The marketing campaign identifier."
            - name: fiscal_period
              in: body
              type: string
              description: "The fiscal period (e.g. 2026-Q1)."
          steps:
            - name: get-campaign-spend
              type: call
              call: "adobe-campaign.get-delivery-stats"
              with:
                campaign_id: "{{campaign_id}}"
            - name: get-payment-totals
              type: call
              call: "stripe.get-balance-transactions"
              with:
                campaign_reference: "{{campaign_id}}"
                period: "{{fiscal_period}}"
            - name: get-budget
              type: call
              call: "sap-bw.get-budget-allocation"
              with:
                cost_center: "marketing"
                period: "{{fiscal_period}}"
            - name: update-excel
              type: call
              call: "sharepoint.update-excel-range"
              with:
                site_id: "finance_reports"
                workbook_path: "Budgets/Marketing_{{fiscal_period}}.xlsx"
                range: "Summary!A2"
                values: "{{campaign_id}},{{get-campaign-spend.total_cost}},{{get-payment-totals.net_amount}},{{get-budget.allocated}},{{get-budget.remaining}}"
  consumes:
    - type: http
      namespace: adobe-campaign
      baseUri: "https://mc.adobe.io/adidas/campaign"
      authentication:
        type: bearer
        token: "$secrets.adobe_campaign_token"
      resources:
        - name: deliveries
          path: "/deliveries/{{campaign_id}}/stats"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: get-delivery-stats
              method: GET
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: balance-transactions
          path: "/balance_transactions"
          operations:
            - name: get-balance-transactions
              method: GET
    - type: http
      namespace: sap-bw
      baseUri: "https://adidas-bw.sap.com/sap/bw/odata/v1"
      authentication:
        type: basic
        username: "$secrets.sap_bw_user"
        password: "$secrets.sap_bw_password"
      resources:
        - name: budgets
          path: "/ZBUDGET_ALLOCATION"
          operations:
            - name: get-budget-allocation
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: excel
          path: "/{{site_id}}/drive/root:/{{workbook_path}}:/workbook/worksheets/{{range}}"
          inputParameters:
            - name: site_id
              in: path
            - name: workbook_path
              in: path
            - name: range
              in: path
          operations:
            - name: update-excel-range
              method: PATCH

Deploys a trained model from Azure Machine Learning to Azure Kubernetes Service, registers the deployment in Datadog, and notifies the data science team in Teams.

naftiko: "0.5"
info:
  label: "ML Model Deployment Pipeline"
  description: "Deploys a trained model from Azure Machine Learning to Azure Kubernetes Service, registers the deployment in Datadog, and notifies the data science team in Teams."
  tags:
    - machine-learning
    - azure-machine-learning
    - azure-kubernetes-service
    - datadog
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: ml-deployment
      port: 8080
      tools:
        - name: deploy-model
          description: "Given a model name and version, deploy to AKS, register in Datadog, and notify the team."
          inputParameters:
            - name: model_name
              in: body
              type: string
              description: "The Azure ML model name."
            - name: model_version
              in: body
              type: string
              description: "The model version to deploy."
            - name: endpoint_name
              in: body
              type: string
              description: "The AKS inference endpoint name."
          steps:
            - name: create-deployment
              type: call
              call: "azure-ml.create-deployment"
              with:
                model_name: "{{model_name}}"
                model_version: "{{model_version}}"
                endpoint_name: "{{endpoint_name}}"
            - name: register-monitor
              type: call
              call: "datadog.create-monitor"
              with:
                name: "ML Model: {{model_name}} v{{model_version}}"
                type: "metric alert"
                query: "avg(last_5m):avg:ml.inference.latency{model:{{model_name}}} > 500"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel: "data-science"
                text: "Model Deployed: {{model_name}} v{{model_version}} to {{endpoint_name}} | Status: {{create-deployment.provisioning_state}} | Monitor: {{register-monitor.id}}"
  consumes:
    - type: http
      namespace: azure-ml
      baseUri: "https://ml.azure.com/api/subscriptions/$secrets.azure_subscription_id/resourceGroups/adidas-ml-rg/providers/Microsoft.MachineLearningServices/workspaces/adidas-ml"
      authentication:
        type: bearer
        token: "$secrets.azure_token"
      resources:
        - name: deployments
          path: "/onlineEndpoints/{{endpoint_name}}/deployments"
          inputParameters:
            - name: endpoint_name
              in: path
          operations:
            - name: create-deployment
              method: PUT
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      inputParameters:
        - name: DD-APPLICATION-KEY
          in: header
          value: "$secrets.datadog_app_key"
      resources:
        - name: monitors
          path: "/monitor"
          operations:
            - name: create-monitor
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          operations:
            - name: send-message
              method: POST

When Palo Alto Networks detects a threat, blocks the source IP via Cisco firewall, creates a ServiceNow security incident, and alerts the SOC team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Network Incident Auto-Remediation"
  description: "When Palo Alto Networks detects a threat, blocks the source IP via Cisco firewall, creates a ServiceNow security incident, and alerts the SOC team in Microsoft Teams."
  tags:
    - security
    - network
    - palo-alto-networks
    - cisco
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: network-security
      port: 8080
      tools:
        - name: remediate-threat
          description: "Given a threat event from Palo Alto, block the source IP, create a security incident, and alert the SOC."
          inputParameters:
            - name: threat_id
              in: body
              type: string
              description: "The Palo Alto threat log ID."
            - name: source_ip
              in: body
              type: string
              description: "The source IP address of the threat."
            - name: threat_type
              in: body
              type: string
              description: "The threat classification."
          steps:
            - name: get-threat-details
              type: call
              call: "paloalto.get-threat-log"
              with:
                threat_id: "{{threat_id}}"
            - name: block-ip
              type: call
              call: "cisco.add-acl-entry"
              with:
                source_ip: "{{source_ip}}"
                action: "deny"
                description: "Auto-blocked: {{threat_type}} — {{threat_id}}"
            - name: create-security-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Network threat: {{threat_type}} from {{source_ip}}"
                category: "security"
                priority: "1"
                description: "Threat: {{get-threat-details.description}} | Source: {{source_ip}} | Auto-blocked via Cisco ACL. Palo Alto log: {{threat_id}}."
            - name: alert-soc
              type: call
              call: "msteams.send-message"
              with:
                channel: "soc-alerts"
                text: "Network Threat Remediated: {{threat_type}} from {{source_ip}} | Blocked: YES | Incident: {{create-security-incident.number}} | PA Log: {{threat_id}}"
  consumes:
    - type: http
      namespace: paloalto
      baseUri: "https://panorama.adidas.com/api"
      authentication:
        type: bearer
        token: "$secrets.paloalto_api_key"
      resources:
        - name: threat-logs
          path: "/logs/threat/{{threat_id}}"
          inputParameters:
            - name: threat_id
              in: path
          operations:
            - name: get-threat-log
              method: GET
    - type: http
      namespace: cisco
      baseUri: "https://cisco-fw.adidas.internal/restconf/data"
      authentication:
        type: basic
        username: "$secrets.cisco_user"
        password: "$secrets.cisco_password"
      resources:
        - name: acl
          path: "/Cisco-IOS-XE-native:native/ip/access-list"
          operations:
            - name: add-acl-entry
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.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: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          operations:
            - name: send-message
              method: POST

Analyzes market data in Snowflake, evaluates regulatory requirements, creates business case in Confluence-equivalent, and notifies strategy team.

naftiko: "0.5"
info:
  label: "New Market Entry Assessment"
  description: "Analyzes market data in Snowflake, evaluates regulatory requirements, creates business case in Confluence-equivalent, and notifies strategy team."
  tags:
    - strategy
    - snowflake
    - salesforce
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: strategy
      port: 8080
      tools:
        - name: new_market_entry_assessment
          description: "Orchestrate new market entry assessment workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-salesforce
              type: call
              call: "salesforce.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-jira
              type: call
              call: "jira.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://adidas.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://adidas.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

On a new product launch, creates an Adobe Campaign email blast, posts to Instagram and Facebook, updates the BigCommerce storefront, and sends an internal Teams notification.

naftiko: "0.5"
info:
  label: "New Product Launch Campaign Orchestrator"
  description: "On a new product launch, creates an Adobe Campaign email blast, posts to Instagram and Facebook, updates the BigCommerce storefront, and sends an internal Teams notification."
  tags:
    - marketing
    - product-launch
    - adobe-campaign
    - instagram
    - facebook
    - bigcommerce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: product-launch
      port: 8080
      tools:
        - name: orchestrate-launch
          description: "Given a product ID, campaign name, and launch date, coordinate the full product launch across marketing channels and the e-commerce storefront."
          inputParameters:
            - name: product_id
              in: body
              type: string
              description: "The Adidas product ID for the new launch."
            - name: campaign_name
              in: body
              type: string
              description: "The name of the marketing campaign."
            - name: launch_date
              in: body
              type: string
              description: "The scheduled launch date in YYYY-MM-DD format."
          steps:
            - name: create-email-campaign
              type: call
              call: "adobe-campaign.create-delivery"
              with:
                campaign_name: "{{campaign_name}}"
                template: "product_launch_v2"
                scheduled_date: "{{launch_date}}"
                product_id: "{{product_id}}"
            - name: post-instagram
              type: call
              call: "instagram.create-media"
              with:
                caption: "The wait is over. {{campaign_name}} drops {{launch_date}}. Link in bio. #adidas #newdrop"
                product_id: "{{product_id}}"
            - name: post-facebook
              type: call
              call: "facebook.create-post"
              with:
                message: "Introducing {{campaign_name}} - available {{launch_date}} on adidas.com and in stores."
                product_id: "{{product_id}}"
            - name: update-storefront
              type: call
              call: "bigcommerce.update-product-visibility"
              with:
                product_id: "{{product_id}}"
                is_visible: "true"
                availability_date: "{{launch_date}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel: "product-launches"
                text: "Product launch orchestrated: {{campaign_name}} | Product: {{product_id}} | Email: {{create-email-campaign.delivery_id}} | IG: {{post-instagram.media_id}} | FB: {{post-facebook.post_id}} | Store: live on {{launch_date}}"
  consumes:
    - type: http
      namespace: adobe-campaign
      baseUri: "https://mc.adobe.io/adidas/campaign"
      authentication:
        type: bearer
        token: "$secrets.adobe_campaign_token"
      inputParameters:
        - name: x-api-key
          in: header
          value: "$secrets.adobe_client_id"
      resources:
        - name: deliveries
          path: "/deliveries"
          operations:
            - name: create-delivery
              method: POST
    - type: http
      namespace: instagram
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: media
          path: "/{{ig_user_id}}/media"
          operations:
            - name: create-media
              method: POST
    - type: http
      namespace: facebook
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.facebook_page_token"
      resources:
        - name: posts
          path: "/{{page_id}}/feed"
          operations:
            - name: create-post
              method: POST
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/adidas/v3"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      resources:
        - name: products
          path: "/catalog/products/{{product_id}}"
          inputParameters:
            - name: product_id
              in: path
          operations:
            - name: update-product-visibility
              method: PUT
    - 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"
          operations:
            - name: send-message
              method: POST

Retrieves Okta user profile for Adidas identity management.

naftiko: "0.5"
info:
  label: "Okta User Profile Lookup"
  description: "Retrieves Okta user profile for Adidas identity management."
  tags:
    - security
    - okta
    - identity
capability:
  exposes:
    - type: mcp
      namespace: identity
      port: 8080
      tools:
        - name: get-user
          description: "Look up user at Adidas."
          inputParameters:
            - name: user_email
              in: body
              type: string
              description: "The user_email to look up." 
          call: "okta.get-user_email"
          with:
            user_email: "{{user_email}}"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://adidas.okta.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.okta_api_token"
        header: "Authorization" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: okta_user_profile_lookup
              method: GET

Pulls online inventory from BigCommerce and warehouse stock from SAP S/4HANA, reconciles discrepancies, and logs mismatches in ServiceNow and a Google Sheet.

naftiko: "0.5"
info:
  label: "Omnichannel Inventory Reconciliation"
  description: "Pulls online inventory from BigCommerce and warehouse stock from SAP S/4HANA, reconciles discrepancies, and logs mismatches in ServiceNow and a Google Sheet."
  tags:
    - supply-chain
    - inventory
    - bigcommerce
    - sap-s4hana
    - servicenow
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: inventory-reconciliation
      port: 8080
      tools:
        - name: reconcile-inventory
          description: "Given a product SKU, compare online and warehouse inventory and log any discrepancies."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "The product SKU to reconcile."
            - name: warehouse_plant
              in: body
              type: string
              description: "The SAP plant code for the warehouse."
          steps:
            - name: get-online-stock
              type: call
              call: "bigcommerce.get-product-stock"
              with:
                sku: "{{sku}}"
            - name: get-warehouse-stock
              type: call
              call: "sap.get-material-stock"
              with:
                material: "{{sku}}"
                plant: "{{warehouse_plant}}"
            - name: log-discrepancy
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Inventory mismatch: {{sku}} — Online: {{get-online-stock.quantity}} vs WH: {{get-warehouse-stock.quantity}}"
                category: "inventory"
                priority: "3"
                description: "SKU {{sku}} at plant {{warehouse_plant}}. BigCommerce: {{get-online-stock.quantity}}, SAP: {{get-warehouse-stock.quantity}}."
            - name: log-to-sheet
              type: call
              call: "gsheets.append-row"
              with:
                spreadsheet_id: "$secrets.inventory_reconciliation_sheet"
                range: "Discrepancies!A1"
                values: "{{sku}},{{warehouse_plant}},{{get-online-stock.quantity}},{{get-warehouse-stock.quantity}},{{log-discrepancy.number}}"
  consumes:
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/adidas/v3"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      resources:
        - name: products
          path: "/catalog/products"
          inputParameters:
            - name: sku
              in: query
          operations:
            - name: get-product-stock
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://adidas-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: stock
          path: "/A_MatlStkInAcctMod"
          operations:
            - name: get-material-stock
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.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: gsheets
      baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: values
          path: "/{{spreadsheet_id}}/values/{{range}}:append"
          inputParameters:
            - name: spreadsheet_id
              in: path
            - name: range
              in: path
          operations:
            - name: append-row
              method: POST

Syncs inventory between SAP warehouse, Salesforce Commerce Cloud, and store POS systems, logs discrepancies in ServiceNow, and alerts supply chain.

naftiko: "0.5"
info:
  label: "Omnichannel Inventory Sync Pipeline"
  description: "Syncs inventory between SAP warehouse, Salesforce Commerce Cloud, and store POS systems, logs discrepancies in ServiceNow, and alerts supply chain."
  tags:
    - inventory
    - sap
    - salesforce
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: inventory
      port: 8080
      tools:
        - name: omnichannel_inventory_sync_pipeline
          description: "Orchestrate omnichannel inventory sync pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-salesforce
              type: call
              call: "salesforce.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: sap
      baseUri: "https://adidas-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://adidas.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

When OpenTelemetry detects high-latency traces, extracts span details, creates a Dynatrace problem annotation, and opens a ServiceNow incident with trace context.

naftiko: "0.5"
info:
  label: "OpenTelemetry Trace to Incident"
  description: "When OpenTelemetry detects high-latency traces, extracts span details, creates a Dynatrace problem annotation, and opens a ServiceNow incident with trace context."
  tags:
    - observability
    - opentelemetry
    - dynatrace
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: trace-incident
      port: 8080
      tools:
        - name: escalate-trace
          description: "Given an OpenTelemetry trace ID, extract details, annotate in Dynatrace, and create an incident."
          inputParameters:
            - name: trace_id
              in: body
              type: string
              description: "The OpenTelemetry trace ID."
            - name: service_name
              in: body
              type: string
              description: "The affected service name."
            - name: latency_ms
              in: body
              type: string
              description: "The observed latency in milliseconds."
          steps:
            - name: get-trace
              type: call
              call: "otel.get-trace"
              with:
                trace_id: "{{trace_id}}"
            - name: annotate-dynatrace
              type: call
              call: "dynatrace.create-event"
              with:
                entity_id: "{{service_name}}"
                event_type: "CUSTOM_ANNOTATION"
                description: "High latency trace: {{trace_id}} — {{latency_ms}}ms"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "High latency: {{service_name}} — {{latency_ms}}ms"
                category: "performance"
                priority: "2"
                description: "Trace ID: {{trace_id}} | Service: {{service_name}} | Latency: {{latency_ms}}ms | Root span: {{get-trace.root_span_name}} | Dynatrace event: {{annotate-dynatrace.id}}"
  consumes:
    - type: http
      namespace: otel
      baseUri: "https://otel-collector.adidas.internal/api/v1"
      authentication:
        type: bearer
        token: "$secrets.otel_token"
      resources:
        - name: traces
          path: "/traces/{{trace_id}}"
          inputParameters:
            - name: trace_id
              in: path
          operations:
            - name: get-trace
              method: GET
    - type: http
      namespace: dynatrace
      baseUri: "https://adidas.live.dynatrace.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.dynatrace_token"
      resources:
        - name: events
          path: "/events/ingest"
          operations:
            - name: create-event
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.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

Monitors order fulfillment times from SAP, checks against SLAs in Snowflake, creates escalations in ServiceNow, and notifies operations.

naftiko: "0.5"
info:
  label: "Order Fulfillment SLA Monitor"
  description: "Monitors order fulfillment times from SAP, checks against SLAs in Snowflake, creates escalations in ServiceNow, and notifies operations."
  tags:
    - fulfillment
    - sap
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: fulfillment
      port: 8080
      tools:
        - name: order_fulfillment_sla_monitor
          description: "Orchestrate order fulfillment sla monitor workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: sap
      baseUri: "https://adidas-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Retrieves PagerDuty incident details for Adidas on-call teams.

naftiko: "0.5"
info:
  label: "PagerDuty Incident Details"
  description: "Retrieves PagerDuty incident details for Adidas on-call teams."
  tags:
    - devops
    - pagerduty
    - on-call
capability:
  exposes:
    - type: mcp
      namespace: incident-mgmt
      port: 8080
      tools:
        - name: get-incident
          description: "Look up incident at Adidas."
          inputParameters:
            - name: incident_id
              in: body
              type: string
              description: "The incident_id to look up." 
          call: "pagerduty.get-incident_id"
          with:
            incident_id: "{{incident_id}}"
  consumes:
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: pagerduty_incident_details
              method: GET

Extracts customer behavior segments from Adobe Analytics, enriches with purchase history from SAP HANA, and pushes personalized recommendations to the BigCommerce storefront.

naftiko: "0.5"
info:
  label: "Personalization Engine Data Sync"
  description: "Extracts customer behavior segments from Adobe Analytics, enriches with purchase history from SAP HANA, and pushes personalized recommendations to the BigCommerce storefront."
  tags:
    - personalization
    - adobe-analytics
    - sap-hana
    - bigcommerce
capability:
  exposes:
    - type: mcp
      namespace: personalization
      port: 8080
      tools:
        - name: sync-personalization
          description: "Given a customer segment ID, pull behavior data and purchase history, then update storefront recommendations."
          inputParameters:
            - name: segment_id
              in: body
              type: string
              description: "The Adobe Analytics segment ID."
            - name: report_suite_id
              in: body
              type: string
              description: "The Adobe Analytics report suite."
          steps:
            - name: get-segment-data
              type: call
              call: "adobe-analytics.get-segment-users"
              with:
                segment_id: "{{segment_id}}"
                report_suite_id: "{{report_suite_id}}"
            - name: get-purchase-history
              type: call
              call: "sap-hana.query-purchase-history"
              with:
                segment_id: "{{segment_id}}"
            - name: update-recommendations
              type: call
              call: "bigcommerce.update-customer-group"
              with:
                segment_id: "{{segment_id}}"
                recommended_products: "{{get-purchase-history.top_products}}"
                behavioral_tags: "{{get-segment-data.interests}}"
  consumes:
    - type: http
      namespace: adobe-analytics
      baseUri: "https://analytics.adobe.io/api/adidas"
      authentication:
        type: bearer
        token: "$secrets.adobe_analytics_token"
      inputParameters:
        - name: x-api-key
          in: header
          value: "$secrets.adobe_client_id"
      resources:
        - name: segments
          path: "/segments/{{segment_id}}/users"
          inputParameters:
            - name: segment_id
              in: path
          operations:
            - name: get-segment-users
              method: GET
    - type: http
      namespace: sap-hana
      baseUri: "https://adidas-hana.sap.com/sap/hana/xs/api"
      authentication:
        type: basic
        username: "$secrets.sap_hana_user"
        password: "$secrets.sap_hana_password"
      resources:
        - name: purchase-history
          path: "/analytics/purchases"
          operations:
            - name: query-purchase-history
              method: POST
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/adidas/v3"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      resources:
        - name: customer-groups
          path: "/customers/groups"
          operations:
            - name: update-customer-group
              method: PUT

Exports customer segments from Snowflake, syncs to Salesforce Marketing Cloud, validates delivery in Datadog, and notifies marketing.

naftiko: "0.5"
info:
  label: "Personalization Engine Sync Pipeline"
  description: "Exports customer segments from Snowflake, syncs to Salesforce Marketing Cloud, validates delivery in Datadog, and notifies marketing."
  tags:
    - marketing
    - snowflake
    - salesforce
    - datadog
    - slack
capability:
  exposes:
    - type: mcp
      namespace: marketing
      port: 8080
      tools:
        - name: personalization_engine_sync_pipeline
          description: "Orchestrate personalization engine sync pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-salesforce
              type: call
              call: "salesforce.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-datadog
              type: call
              call: "datadog.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://adidas.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        header: "DD-API-KEY" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: datadog-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

When a new employee joins a department, assigns the relevant Pluralsight learning path, creates a Microsoft Planner task for completion tracking, and notifies the manager in Teams.

naftiko: "0.5"
info:
  label: "Pluralsight Learning Path Assignment"
  description: "When a new employee joins a department, assigns the relevant Pluralsight learning path, creates a Microsoft Planner task for completion tracking, and notifies the manager in Teams."
  tags:
    - learning
    - pluralsight
    - microsoft-planner
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: learning
      port: 8080
      tools:
        - name: assign-learning-path
          description: "Given an employee email and department, assign the Pluralsight path, create a tracking task, and notify the manager."
          inputParameters:
            - name: employee_email
              in: body
              type: string
              description: "The new employee email."
            - name: department
              in: body
              type: string
              description: "The department the employee is joining."
            - name: manager_email
              in: body
              type: string
              description: "The manager email for notification."
          steps:
            - name: assign-path
              type: call
              call: "pluralsight.assign-channel"
              with:
                user_email: "{{employee_email}}"
                channel_name: "{{department}}_onboarding"
            - name: create-task
              type: call
              call: "planner.create-task"
              with:
                plan_id: "$secrets.learning_plan_id"
                title: "Complete Pluralsight path: {{department}}_onboarding"
                assigned_to: "{{employee_email}}"
                due_date: "+30d"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{manager_email}}"
                text: "Learning path assigned to {{employee_email}}: {{department}}_onboarding | Due in 30 days | Task: {{create-task.id}}"
  consumes:
    - type: http
      namespace: pluralsight
      baseUri: "https://api.pluralsight.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pluralsight_token"
      resources:
        - name: channels
          path: "/channels/assign"
          operations:
            - name: assign-channel
              method: POST
    - type: http
      namespace: planner
      baseUri: "https://graph.microsoft.com/v1.0/planner"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: tasks
          path: "/tasks"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Queries Microsoft Power Automate for failed flow runs, creates ServiceNow incidents for each failure, and posts a summary to Microsoft Teams.

naftiko: "0.5"
info:
  label: "Power Automate Workflow Status Reporter"
  description: "Queries Microsoft Power Automate for failed flow runs, creates ServiceNow incidents for each failure, and posts a summary to Microsoft Teams."
  tags:
    - automation
    - microsoft-power-automate
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: rpa-ops
      port: 8080
      tools:
        - name: report-failed-flows
          description: "Given a date range, find all failed Power Automate flows, create incidents, and summarize in Teams."
          inputParameters:
            - name: date_from
              in: body
              type: string
              description: "Start date for the search in YYYY-MM-DD format."
            - name: date_to
              in: body
              type: string
              description: "End date for the search in YYYY-MM-DD format."
          steps:
            - name: get-failed-runs
              type: call
              call: "power-automate.list-failed-runs"
              with:
                date_from: "{{date_from}}"
                date_to: "{{date_to}}"
            - name: create-incidents
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Power Automate failure: {{get-failed-runs.flow_name}}"
                category: "automation"
                priority: "3"
                description: "Flow: {{get-failed-runs.flow_name}} | Run ID: {{get-failed-runs.run_id}} | Error: {{get-failed-runs.error_message}}"
            - name: post-summary
              type: call
              call: "msteams.send-message"
              with:
                channel: "automation-ops"
                text: "Power Automate Failure Summary ({{date_from}} to {{date_to}}): {{get-failed-runs.total_failures}} failed runs | Incident: {{create-incidents.number}}"
  consumes:
    - type: http
      namespace: power-automate
      baseUri: "https://api.flow.microsoft.com/providers/Microsoft.ProcessSimple"
      authentication:
        type: bearer
        token: "$secrets.power_automate_token"
      resources:
        - name: flow-runs
          path: "/environments/$secrets.pa_environment_id/flows"
          operations:
            - name: list-failed-runs
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.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: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          operations:
            - name: send-message
              method: POST

Triggers Power BI dataset refresh for Adidas reporting.

naftiko: "0.5"
info:
  label: "Power BI Refresh Trigger"
  description: "Triggers Power BI dataset refresh for Adidas reporting."
  tags:
    - analytics
    - power-bi
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: trigger-refresh
          description: "Trigger refresh at Adidas."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "The dataset_id to look up." 
          call: "powerbi.get-dataset_id"
          with:
            dataset_id: "{{dataset_id}}"
  consumes:
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: power_bi_refresh_trigger
              method: GET

Queries SAP S/4HANA for real-time stock levels of a given SKU across all regional warehouses. Used by merchandising and store operations teams.

naftiko: "0.5"
info:
  label: "Product Inventory Lookup"
  description: "Queries SAP S/4HANA for real-time stock levels of a given SKU across all regional warehouses. Used by merchandising and store operations teams."
  tags:
    - retail
    - inventory
    - sap-s4hana
capability:
  exposes:
    - type: mcp
      namespace: inventory
      port: 8080
      tools:
        - name: get-sku-inventory
          description: "Look up current inventory levels for a product SKU across all Adidas distribution centers."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "The Adidas product SKU identifier."
          call: "sap.get-inventory"
          with:
            sku: "{{sku}}"
          outputParameters:
            - name: total_available
              type: string
              mapping: "$.d.AvailableStock"
            - name: warehouse_breakdown
              type: string
              mapping: "$.d.PlantStockDetails"
            - name: reserved_quantity
              type: string
              mapping: "$.d.ReservedQuantity"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://adidas-s4.sap.com/sap/opu/odata/sap/API_MATERIAL_STOCK_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      inputParameters:
        - name: Accept
          in: header
          value: "application/json"
        - name: sap-client
          in: header
          value: "100"
      resources:
        - name: material-stock
          path: "/A_MatlStkInAcctMod(Material='{{sku}}')"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: get-inventory
              method: GET

Validates inventory in SAP, checks marketing assets in Adobe, confirms pricing in Salesforce, updates e-commerce catalog, and notifies launch team.

naftiko: "0.5"
info:
  label: "Product Launch Readiness Orchestrator"
  description: "Validates inventory in SAP, checks marketing assets in Adobe, confirms pricing in Salesforce, updates e-commerce catalog, and notifies launch team."
  tags:
    - product-launch
    - sap
    - salesforce
    - slack
capability:
  exposes:
    - type: mcp
      namespace: product-launch
      port: 8080
      tools:
        - name: product_launch_readiness_orchestrator
          description: "Orchestrate product launch readiness orchestrator workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-salesforce
              type: call
              call: "salesforce.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: sap
      baseUri: "https://adidas-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://adidas.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST

Tracks product stages in SAP PLM, syncs to Snowflake for analytics, creates phase-gate tasks in Jira, and notifies product management.

naftiko: "0.5"
info:
  label: "Product Lifecycle Management Pipeline"
  description: "Tracks product stages in SAP PLM, syncs to Snowflake for analytics, creates phase-gate tasks in Jira, and notifies product management."
  tags:
    - plm
    - sap
    - snowflake
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: plm
      port: 8080
      tools:
        - name: product_lifecycle_management_pipeline
          description: "Orchestrate product lifecycle management pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-jira
              type: call
              call: "jira.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: sap
      baseUri: "https://adidas-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://adidas.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Retrieves QC results from SAP, runs statistical analysis in Snowflake, flags defective batches, creates Jira tasks, and notifies quality team.

naftiko: "0.5"
info:
  label: "Product Quality Inspection Pipeline"
  description: "Retrieves QC results from SAP, runs statistical analysis in Snowflake, flags defective batches, creates Jira tasks, and notifies quality team."
  tags:
    - quality
    - sap
    - snowflake
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: quality
      port: 8080
      tools:
        - name: product_quality_inspection_pipeline
          description: "Orchestrate product quality inspection pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-jira
              type: call
              call: "jira.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: sap
      baseUri: "https://adidas-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://adidas.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Identifies affected batches in SAP, traces distribution, notifies retailers via Salesforce, creates recall task force in ServiceNow, and alerts legal.

naftiko: "0.5"
info:
  label: "Product Recall Management Pipeline"
  description: "Identifies affected batches in SAP, traces distribution, notifies retailers via Salesforce, creates recall task force in ServiceNow, and alerts legal."
  tags:
    - quality
    - sap
    - salesforce
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: quality
      port: 8080
      tools:
        - name: product_recall_management_pipeline
          description: "Orchestrate product recall management pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-salesforce
              type: call
              call: "salesforce.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: sap
      baseUri: "https://adidas-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://adidas.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Extracts return data from SAP, analyzes patterns in Snowflake, identifies quality issues, creates Jira tickets, and notifies product team.

naftiko: "0.5"
info:
  label: "Product Return Analysis Pipeline"
  description: "Extracts return data from SAP, analyzes patterns in Snowflake, identifies quality issues, creates Jira tickets, and notifies product team."
  tags:
    - returns
    - sap
    - snowflake
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: returns
      port: 8080
      tools:
        - name: product_return_analysis_pipeline
          description: "Orchestrate product return analysis pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-jira
              type: call
              call: "jira.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: sap
      baseUri: "https://adidas-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://adidas.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Runs a PromQL instant query against the Adidas Prometheus cluster and returns the current metric value.

naftiko: "0.5"
info:
  label: "Prometheus Metric Query"
  description: "Runs a PromQL instant query against the Adidas Prometheus cluster and returns the current metric value."
  tags:
    - observability
    - prometheus
    - metrics
capability:
  exposes:
    - type: mcp
      namespace: metrics
      port: 8080
      tools:
        - name: query-metric
          description: "Execute a PromQL instant query and return the current value for the specified metric expression."
          inputParameters:
            - name: promql
              in: body
              type: string
              description: "The PromQL expression to evaluate."
          call: "prometheus.instant-query"
          with:
            promql: "{{promql}}"
          outputParameters:
            - name: value
              type: string
              mapping: "$.data.result[0].value[1]"
            - name: metric
              type: string
              mapping: "$.data.result[0].metric"
  consumes:
    - type: http
      namespace: prometheus
      baseUri: "https://prometheus.adidas.internal/api/v1"
      authentication:
        type: bearer
        token: "$secrets.prometheus_token"
      resources:
        - name: query
          path: "/query"
          inputParameters:
            - name: query
              in: query
              value: "{{promql}}"
          operations:
            - name: instant-query
              method: GET

Retrieves promo plan from Salesforce, validates margins in Snowflake, updates SAP pricing, syncs to e-commerce, and notifies merchandising.

naftiko: "0.5"
info:
  label: "Promotional Pricing Orchestrator"
  description: "Retrieves promo plan from Salesforce, validates margins in Snowflake, updates SAP pricing, syncs to e-commerce, and notifies merchandising."
  tags:
    - pricing
    - salesforce
    - snowflake
    - sap
    - slack
capability:
  exposes:
    - type: mcp
      namespace: pricing
      port: 8080
      tools:
        - name: promotional_pricing_orchestrator
          description: "Orchestrate promotional pricing orchestrator workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-salesforce
              type: call
              call: "salesforce.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-sap
              type: call
              call: "sap.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://adidas.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://adidas-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Pulls store sales data from Teradata, KPI metrics from SAP BW, and customer foot traffic from Google Analytics, then consolidates into a Google Sheet for regional managers.

naftiko: "0.5"
info:
  label: "Retail Store Performance Dashboard Sync"
  description: "Pulls store sales data from Teradata, KPI metrics from SAP BW, and customer foot traffic from Google Analytics, then consolidates into a Google Sheet for regional managers."
  tags:
    - retail
    - analytics
    - teradata
    - sap-bw
    - google-analytics
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: retail-reporting
      port: 8080
      tools:
        - name: sync-store-dashboard
          description: "Given a store ID and date range, collect sales, KPIs, and traffic data and write to a Google Sheet."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The Adidas retail store identifier."
            - name: date_range
              in: body
              type: string
              description: "Date range in YYYY-MM-DD/YYYY-MM-DD format."
            - name: spreadsheet_id
              in: body
              type: string
              description: "The Google Sheets spreadsheet ID for output."
          steps:
            - name: get-sales
              type: call
              call: "teradata.query-store-sales"
              with:
                store_id: "{{store_id}}"
                date_range: "{{date_range}}"
            - name: get-kpis
              type: call
              call: "sap-bw.get-store-kpis"
              with:
                store_id: "{{store_id}}"
                date_range: "{{date_range}}"
            - name: get-traffic
              type: call
              call: "ga.get-store-traffic"
              with:
                store_id: "{{store_id}}"
                date_range: "{{date_range}}"
            - name: write-to-sheet
              type: call
              call: "gsheets.update-range"
              with:
                spreadsheet_id: "{{spreadsheet_id}}"
                range: "Dashboard!A1"
                values: "Store: {{store_id}} | Revenue: {{get-sales.total_revenue}} | Transactions: {{get-sales.transactions}} | Conversion: {{get-kpis.conversion_rate}} | Foot Traffic: {{get-traffic.sessions}}"
  consumes:
    - type: http
      namespace: teradata
      baseUri: "https://teradata.adidas.internal/api/v1"
      authentication:
        type: basic
        username: "$secrets.teradata_user"
        password: "$secrets.teradata_password"
      resources:
        - name: queries
          path: "/queries"
          operations:
            - name: query-store-sales
              method: POST
    - type: http
      namespace: sap-bw
      baseUri: "https://adidas-bw.sap.com/sap/bw/odata/v1"
      authentication:
        type: basic
        username: "$secrets.sap_bw_user"
        password: "$secrets.sap_bw_password"
      resources:
        - name: store-kpis
          path: "/ZRETAIL_STORE_KPI"
          operations:
            - name: get-store-kpis
              method: GET
    - type: http
      namespace: ga
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/properties/{{property_id}}:runReport"
          operations:
            - name: get-store-traffic
              method: POST
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: values
          path: "/{{spreadsheet_id}}/values/{{range}}"
          inputParameters:
            - name: spreadsheet_id
              in: path
            - name: range
              in: path
          operations:
            - name: update-range
              method: PUT

Collects POS data from SAP, aggregates in Snowflake, refreshes Power BI dashboards, identifies underperformers, and notifies retail ops.

naftiko: "0.5"
info:
  label: "Retail Store Performance Pipeline"
  description: "Collects POS data from SAP, aggregates in Snowflake, refreshes Power BI dashboards, identifies underperformers, and notifies retail ops."
  tags:
    - retail
    - sap
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: retail
      port: 8080
      tools:
        - name: retail_store_performance_pipeline
          description: "Orchestrate retail store performance pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: sap
      baseUri: "https://adidas-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST

Monitors POS anomalies from SAP, cross-references with video analytics, creates investigation cases in ServiceNow, and alerts loss prevention.

naftiko: "0.5"
info:
  label: "Retail Theft Prevention Pipeline"
  description: "Monitors POS anomalies from SAP, cross-references with video analytics, creates investigation cases in ServiceNow, and alerts loss prevention."
  tags:
    - loss-prevention
    - sap
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: loss-prevention
      port: 8080
      tools:
        - name: retail_theft_prevention_pipeline
          description: "Orchestrate retail theft prevention pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: sap
      baseUri: "https://adidas-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Retrieves Salesforce account details for Adidas sales teams.

naftiko: "0.5"
info:
  label: "Salesforce Account Info"
  description: "Retrieves Salesforce account details for Adidas sales teams."
  tags:
    - crm
    - salesforce
    - accounts
capability:
  exposes:
    - type: mcp
      namespace: crm
      port: 8080
      tools:
        - name: get-account
          description: "Look up account at Adidas."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The account_id to look up." 
          call: "salesforce.get-account_id"
          with:
            account_id: "{{account_id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://adidas.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce_account_info
              method: GET

Retrieves a Salesforce lead record and returns scoring details, source channel, and status. Used by sales development reps to prioritize outreach.

naftiko: "0.5"
info:
  label: "Salesforce Lead Qualification"
  description: "Retrieves a Salesforce lead record and returns scoring details, source channel, and status. Used by sales development reps to prioritize outreach."
  tags:
    - sales
    - salesforce
    - lead-management
capability:
  exposes:
    - type: mcp
      namespace: sales
      port: 8080
      tools:
        - name: get-lead-details
          description: "Look up a Salesforce lead by ID and return qualification score, status, and source."
          inputParameters:
            - name: lead_id
              in: body
              type: string
              description: "The Salesforce lead record ID."
          call: "salesforce.get-lead"
          with:
            lead_id: "{{lead_id}}"
          outputParameters:
            - name: lead_score
              type: string
              mapping: "$.Lead_Score__c"
            - name: status
              type: string
              mapping: "$.Status"
            - name: source
              type: string
              mapping: "$.LeadSource"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://adidas.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

When a Salesforce opportunity is marked as Closed Won, creates a sales order in SAP S/4HANA, updates the Salesforce record with the SAP order number, and notifies the fulfillment team in Teams.

naftiko: "0.5"
info:
  label: "Salesforce to SAP Order Sync"
  description: "When a Salesforce opportunity is marked as Closed Won, creates a sales order in SAP S/4HANA, updates the Salesforce record with the SAP order number, and notifies the fulfillment team in Teams."
  tags:
    - sales
    - salesforce
    - sap-s4hana
    - microsoft-teams
    - order-management
capability:
  exposes:
    - type: mcp
      namespace: order-sync
      port: 8080
      tools:
        - name: sync-won-opportunity
          description: "Given a Salesforce opportunity ID, create a SAP sales order, update SF with the order number, and notify fulfillment."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The Salesforce opportunity ID."
          steps:
            - name: get-opportunity
              type: call
              call: "salesforce.get-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
            - name: create-sales-order
              type: call
              call: "sap.create-sales-order"
              with:
                customer_id: "{{get-opportunity.account_sap_id}}"
                amount: "{{get-opportunity.amount}}"
                products: "{{get-opportunity.line_items}}"
                delivery_date: "{{get-opportunity.close_date}}"
            - name: update-salesforce
              type: call
              call: "salesforce.update-opportunity"
              with:
                opportunity_id: "{{opportunity_id}}"
                sap_order_number: "{{create-sales-order.order_number}}"
            - name: notify-fulfillment
              type: call
              call: "msteams.send-message"
              with:
                channel: "fulfillment-ops"
                text: "New Sales Order: SAP {{create-sales-order.order_number}} from SF Opportunity {{opportunity_id}} | Customer: {{get-opportunity.account_name}} | Amount: {{get-opportunity.amount}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://adidas.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
            - name: update-opportunity
              method: PATCH
    - type: http
      namespace: sap
      baseUri: "https://adidas-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: 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"
          operations:
            - name: send-message
              method: POST

Runs a top-N sales query against SAP HANA for a given product category and region, returning aggregated revenue and units sold.

naftiko: "0.5"
info:
  label: "SAP HANA Sales Cube Query"
  description: "Runs a top-N sales query against SAP HANA for a given product category and region, returning aggregated revenue and units sold."
  tags:
    - analytics
    - sap-hana
    - sales
capability:
  exposes:
    - type: mcp
      namespace: sales-analytics
      port: 8080
      tools:
        - name: query-sales-cube
          description: "Query SAP HANA sales analytics cube for revenue and units sold by product category and region."
          inputParameters:
            - name: category
              in: body
              type: string
              description: "Product category (e.g. footwear, apparel, accessories)."
            - name: region
              in: body
              type: string
              description: "Sales region code (e.g. EMEA, NAM, APAC)."
          call: "sap-hana.run-query"
          with:
            category: "{{category}}"
            region: "{{region}}"
          outputParameters:
            - name: total_revenue
              type: string
              mapping: "$.results[0].REVENUE"
            - name: units_sold
              type: string
              mapping: "$.results[0].UNITS"
  consumes:
    - type: http
      namespace: sap-hana
      baseUri: "https://adidas-hana.sap.com/sap/hana/xs/api"
      authentication:
        type: basic
        username: "$secrets.sap_hana_user"
        password: "$secrets.sap_hana_password"
      resources:
        - name: sales-cube
          path: "/analytics/sales"
          operations:
            - name: run-query
              method: POST

When a SAP S/4HANA purchase order exceeds a spend threshold, routes for manager approval via PeopleSoft and notifies the requestor in Microsoft Teams with approval status.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Approval Pipeline"
  description: "When a SAP S/4HANA purchase order exceeds a spend threshold, routes for manager approval via PeopleSoft and notifies the requestor in Microsoft Teams with approval status."
  tags:
    - procurement
    - sap-s4hana
    - peoplesoft
    - microsoft-teams
    - approval
capability:
  exposes:
    - type: mcp
      namespace: po-approval
      port: 8080
      tools:
        - name: route-po-approval
          description: "Given a PO number and requestor ID, check the amount, route for approval, and notify both parties."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number."
            - name: requestor_id
              in: body
              type: string
              description: "The PeopleSoft employee ID of the requestor."
            - name: spend_amount
              in: body
              type: string
              description: "The total PO amount."
          steps:
            - name: get-po
              type: call
              call: "sap.get-purchase-order"
              with:
                po_number: "{{po_number}}"
            - name: get-approver
              type: call
              call: "peoplesoft.get-manager"
              with:
                employee_id: "{{requestor_id}}"
            - name: notify-approver
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-approver.manager_email}}"
                text: "PO Approval Required: PO {{po_number}} for {{spend_amount}} from {{get-po.vendor_name}}. Please review and approve."
            - name: notify-requestor
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-approver.employee_email}}"
                text: "Your PO {{po_number}} ({{spend_amount}}) has been routed to {{get-approver.manager_name}} for approval."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://adidas-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-purchase-order
              method: GET
    - type: http
      namespace: peoplesoft
      baseUri: "https://peoplesoft.adidas.com/psftapi/v1"
      authentication:
        type: basic
        username: "$secrets.peoplesoft_user"
        password: "$secrets.peoplesoft_password"
      resources:
        - name: employees
          path: "/employees/{{employee_id}}/manager"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-manager
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

When seasonal markdowns are triggered, updates product prices in BigCommerce, adjusts SAP pricing conditions, and sends a promotional email via Adobe Campaign.

naftiko: "0.5"
info:
  label: "Seasonal Markdown Execution"
  description: "When seasonal markdowns are triggered, updates product prices in BigCommerce, adjusts SAP pricing conditions, and sends a promotional email via Adobe Campaign."
  tags:
    - retail
    - pricing
    - bigcommerce
    - sap-s4hana
    - adobe-campaign
capability:
  exposes:
    - type: mcp
      namespace: markdown
      port: 8080
      tools:
        - name: execute-markdown
          description: "Given a product category, discount percentage, and effective date, apply markdowns across all channels."
          inputParameters:
            - name: category
              in: body
              type: string
              description: "Product category to markdown."
            - name: discount_pct
              in: body
              type: string
              description: "Discount percentage to apply."
            - name: effective_date
              in: body
              type: string
              description: "Markdown effective date in YYYY-MM-DD format."
          steps:
            - name: update-ecommerce-prices
              type: call
              call: "bigcommerce.batch-update-prices"
              with:
                category: "{{category}}"
                discount_pct: "{{discount_pct}}"
                effective_date: "{{effective_date}}"
            - name: update-sap-conditions
              type: call
              call: "sap.update-pricing-condition"
              with:
                condition_type: "ZK07"
                category: "{{category}}"
                discount_pct: "{{discount_pct}}"
                valid_from: "{{effective_date}}"
            - name: send-promo-email
              type: call
              call: "adobe-campaign.create-delivery"
              with:
                template: "seasonal_markdown_v1"
                category: "{{category}}"
                discount_pct: "{{discount_pct}}"
                scheduled_date: "{{effective_date}}"
  consumes:
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/adidas/v3"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      resources:
        - name: products
          path: "/catalog/products"
          operations:
            - name: batch-update-prices
              method: PUT
    - type: http
      namespace: sap
      baseUri: "https://adidas-s4.sap.com/sap/opu/odata/sap/API_SLSPRICINGCONDITIONRECORD_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: conditions
          path: "/A_SlsPrcgCndnRecdValidity"
          operations:
            - name: update-pricing-condition
              method: POST
    - type: http
      namespace: adobe-campaign
      baseUri: "https://mc.adobe.io/adidas/campaign"
      authentication:
        type: bearer
        token: "$secrets.adobe_campaign_token"
      resources:
        - name: deliveries
          path: "/deliveries"
          operations:
            - name: create-delivery
              method: POST

Analyzes sell-through rates in Snowflake, calculates optimal markdowns, updates pricing in SAP, refreshes dashboards, and notifies merchandising.

naftiko: "0.5"
info:
  label: "Seasonal Markdown Optimization"
  description: "Analyzes sell-through rates in Snowflake, calculates optimal markdowns, updates pricing in SAP, refreshes dashboards, and notifies merchandising."
  tags:
    - merchandising
    - snowflake
    - sap
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: merchandising
      port: 8080
      tools:
        - name: seasonal_markdown_optimization
          description: "Orchestrate seasonal markdown optimization workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-sap
              type: call
              call: "sap.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://adidas-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST

When SonarQube detects a critical vulnerability, creates a GitHub issue, opens a ServiceNow security incident, and alerts the security team via Teams.

naftiko: "0.5"
info:
  label: "Security Vulnerability Response"
  description: "When SonarQube detects a critical vulnerability, creates a GitHub issue, opens a ServiceNow security incident, and alerts the security team via Teams."
  tags:
    - security
    - sonarqube
    - github
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: security-response
      port: 8080
      tools:
        - name: handle-vulnerability
          description: "Given a SonarQube project and vulnerability details, create tracking issue, security incident, and alert the team."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "The SonarQube project key."
            - name: vulnerability_id
              in: body
              type: string
              description: "The SonarQube vulnerability issue key."
            - name: severity
              in: body
              type: string
              description: "Vulnerability severity (CRITICAL, HIGH, MEDIUM, LOW)."
          steps:
            - name: get-vulnerability
              type: call
              call: "sonarqube.get-issue"
              with:
                issue_key: "{{vulnerability_id}}"
            - name: create-gh-issue
              type: call
              call: "github.create-issue"
              with:
                repository: "adidas/{{project_key}}"
                title: "[Security] {{severity}}: {{get-vulnerability.message}}"
                body: "SonarQube: {{vulnerability_id}}\nSeverity: {{severity}}\nComponent: {{get-vulnerability.component}}\nLine: {{get-vulnerability.line}}"
                labels: "security,{{severity}}"
            - name: create-security-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Security vulnerability: {{project_key}} — {{severity}}"
                category: "security"
                priority: "1"
                description: "{{get-vulnerability.message}}. GitHub: {{create-gh-issue.html_url}}"
            - name: alert-security
              type: call
              call: "msteams.send-message"
              with:
                channel: "security-alerts"
                text: "Security Alert: {{severity}} vulnerability in {{project_key}} | {{get-vulnerability.message}} | GH: {{create-gh-issue.html_url}} | Incident: {{create-security-incident.number}}"
  consumes:
    - type: http
      namespace: sonarqube
      baseUri: "https://sonarqube.adidas.internal/api"
      authentication:
        type: bearer
        token: "$secrets.sonarqube_token"
      resources:
        - name: issues
          path: "/issues/search"
          inputParameters:
            - name: issues
              in: query
              value: "{{issue_key}}"
          operations:
            - name: get-issue
              method: GET
    - type: http
      namespace: github
      baseUri: "https://api.github.com/repos"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: issues
          path: "/{{repository}}/issues"
          inputParameters:
            - name: repository
              in: path
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.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: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          operations:
            - name: send-message
              method: POST

Checks ServiceNow incident status for Adidas IT operations.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Status Check"
  description: "Checks ServiceNow incident status for Adidas IT operations."
  tags:
    - itsm
    - servicenow
    - incident-management
capability:
  exposes:
    - type: mcp
      namespace: itsm
      port: 8080
      tools:
        - name: get-incident
          description: "Look up incident at Adidas."
          inputParameters:
            - name: incident_id
              in: body
              type: string
              description: "The incident_id to look up." 
          call: "servicenow.get-incident_id"
          with:
            incident_id: "{{incident_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow_incident_status_che
              method: GET

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

naftiko: "0.5"
info:
  label: "ServiceNow Incident Status"
  description: "Looks up a ServiceNow incident by number and returns its state, priority, assigned group, and resolution notes."
  tags:
    - itsm
    - servicenow
    - incident-management
capability:
  exposes:
    - type: mcp
      namespace: itsm
      port: 8080
      tools:
        - name: get-incident
          description: "Retrieve a ServiceNow incident record by number including state, priority, and assignment."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number (e.g. INC0012345)."
          call: "servicenow.get-incident"
          with:
            incident_number: "{{incident_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result[0].state"
            - name: priority
              type: string
              mapping: "$.result[0].priority"
            - name: assigned_group
              type: string
              mapping: "$.result[0].assignment_group.display_value"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          inputParameters:
            - name: sysparm_query
              in: query
              value: "number={{incident_number}}"
            - name: incident_number
              in: path
          operations:
            - name: get-incident
              method: GET

Sends a message to a Slack channel for Adidas notifications.

naftiko: "0.5"
info:
  label: "Slack Channel Post"
  description: "Sends a message to a Slack channel for Adidas notifications."
  tags:
    - collaboration
    - slack
    - messaging
capability:
  exposes:
    - type: mcp
      namespace: messaging
      port: 8080
      tools:
        - name: send-message
          description: "Post to Slack at Adidas."
          inputParameters:
            - name: channel
              in: body
              type: string
              description: "The channel to look up." 
          call: "slack.get-channel"
          with:
            channel: "{{channel}}"
  consumes:
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack_channel_post
              method: GET

Executes SQL queries against Adidas Snowflake warehouse.

naftiko: "0.5"
info:
  label: "Snowflake Query Executor"
  description: "Executes SQL queries against Adidas Snowflake warehouse."
  tags:
    - data
    - snowflake
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: run-query
          description: "Run query at Adidas."
          inputParameters:
            - name: sql_query
              in: body
              type: string
              description: "The sql_query to look up." 
          call: "snowflake.get-sql_query"
          with:
            sql_query: "{{sql_query}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake_query_executor
              method: GET

Collects engagement metrics from social APIs, aggregates in Snowflake, updates HubSpot campaign records, refreshes dashboards, and notifies marketing.

naftiko: "0.5"
info:
  label: "Social Media Campaign Tracker"
  description: "Collects engagement metrics from social APIs, aggregates in Snowflake, updates HubSpot campaign records, refreshes dashboards, and notifies marketing."
  tags:
    - marketing
    - hubspot
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: marketing
      port: 8080
      tools:
        - name: social_media_campaign_tracker
          description: "Orchestrate social media campaign tracker workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-hubspot
              type: call
              call: "hubspot.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: hubspot-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST

Collects engagement metrics from Instagram, Facebook, Twitter, and YouTube for a given campaign hashtag and posts a consolidated summary to Microsoft Teams.

naftiko: "0.5"
info:
  label: "Social Media Engagement Aggregator"
  description: "Collects engagement metrics from Instagram, Facebook, Twitter, and YouTube for a given campaign hashtag and posts a consolidated summary to Microsoft Teams."
  tags:
    - marketing
    - social-media
    - instagram
    - facebook
    - twitter
    - youtube
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: social-analytics
      port: 8080
      tools:
        - name: aggregate-engagement
          description: "Given a campaign hashtag, collect engagement metrics from all social channels and post a summary to Teams."
          inputParameters:
            - name: hashtag
              in: body
              type: string
              description: "The campaign hashtag to track (without #)."
            - name: date_range
              in: body
              type: string
              description: "Date range in YYYY-MM-DD/YYYY-MM-DD format."
          steps:
            - name: get-instagram-metrics
              type: call
              call: "instagram.get-hashtag-metrics"
              with:
                hashtag: "{{hashtag}}"
                date_range: "{{date_range}}"
            - name: get-facebook-metrics
              type: call
              call: "facebook.get-page-insights"
              with:
                hashtag: "{{hashtag}}"
                date_range: "{{date_range}}"
            - name: get-twitter-metrics
              type: call
              call: "twitter.get-tweet-metrics"
              with:
                hashtag: "{{hashtag}}"
                date_range: "{{date_range}}"
            - name: get-youtube-metrics
              type: call
              call: "youtube.get-video-metrics"
              with:
                hashtag: "{{hashtag}}"
                date_range: "{{date_range}}"
            - name: post-summary
              type: call
              call: "msteams.send-message"
              with:
                channel: "marketing-analytics"
                text: "Campaign #{{hashtag}} Engagement Summary | IG: {{get-instagram-metrics.total_engagement}} | FB: {{get-facebook-metrics.total_engagement}} | Twitter: {{get-twitter-metrics.total_engagement}} | YT: {{get-youtube-metrics.total_views}}"
  consumes:
    - type: http
      namespace: instagram
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: hashtag-search
          path: "/ig_hashtag_search"
          operations:
            - name: get-hashtag-metrics
              method: GET
    - type: http
      namespace: facebook
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.facebook_page_token"
      resources:
        - name: insights
          path: "/{{page_id}}/insights"
          operations:
            - name: get-page-insights
              method: GET
    - type: http
      namespace: twitter
      baseUri: "https://api.twitter.com/2"
      authentication:
        type: bearer
        token: "$secrets.twitter_bearer_token"
      resources:
        - name: tweets
          path: "/tweets/search/recent"
          operations:
            - name: get-tweet-metrics
              method: GET
    - type: http
      namespace: youtube
      baseUri: "https://www.googleapis.com/youtube/v3"
      authentication:
        type: bearer
        token: "$secrets.youtube_api_key"
      resources:
        - name: search
          path: "/search"
          operations:
            - name: get-video-metrics
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          operations:
            - name: send-message
              method: POST

Searches Splunk indexes for log entries at Adidas.

naftiko: "0.5"
info:
  label: "Splunk Log Search"
  description: "Searches Splunk indexes for log entries at Adidas."
  tags:
    - devops
    - splunk
    - logging
capability:
  exposes:
    - type: mcp
      namespace: logging
      port: 8080
      tools:
        - name: search-logs
          description: "Search Splunk logs for Adidas."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "The query to look up." 
          call: "splunk.get-query"
          with:
            query: "{{query}}"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://adidas-splunk.com/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: splunk_log_search
              method: GET

Provisions store in SAP, creates Salesforce location record, sets up ServiceNow IT support, assigns staff in Workday, and notifies retail operations.

naftiko: "0.5"
info:
  label: "Store Opening Orchestrator"
  description: "Provisions store in SAP, creates Salesforce location record, sets up ServiceNow IT support, assigns staff in Workday, and notifies retail operations."
  tags:
    - retail
    - sap
    - salesforce
    - servicenow
    - workday
capability:
  exposes:
    - type: mcp
      namespace: retail
      port: 8080
      tools:
        - name: store_opening_orchestrator
          description: "Orchestrate store opening orchestrator workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-salesforce
              type: call
              call: "salesforce.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-workday
              type: call
              call: "workday.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: sap
      baseUri: "https://adidas-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://adidas.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/adidas"
      authentication:
        type: bearer
        token: "$secrets.workday_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: workday-op
              method: POST

Retrieves a Stripe payment intent by ID and returns amount, status, currency, and last four digits of the card used. Used by finance operations.

naftiko: "0.5"
info:
  label: "Stripe Payment Lookup"
  description: "Retrieves a Stripe payment intent by ID and returns amount, status, currency, and last four digits of the card used. Used by finance operations."
  tags:
    - finance
    - stripe
    - payments
capability:
  exposes:
    - type: mcp
      namespace: payments
      port: 8080
      tools:
        - name: get-payment
          description: "Look up a Stripe payment intent by ID and return its amount, status, and payment method details."
          inputParameters:
            - name: payment_intent_id
              in: body
              type: string
              description: "The Stripe payment intent ID (e.g. pi_xxx)."
          call: "stripe.get-payment-intent"
          with:
            payment_intent_id: "{{payment_intent_id}}"
          outputParameters:
            - name: amount
              type: string
              mapping: "$.amount"
            - name: currency
              type: string
              mapping: "$.currency"
            - name: status
              type: string
              mapping: "$.status"
            - name: card_last4
              type: string
              mapping: "$.payment_method.card.last4"
  consumes:
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: payment-intents
          path: "/payment_intents/{{payment_intent_id}}"
          inputParameters:
            - name: payment_intent_id
              in: path
          operations:
            - name: get-payment-intent
              method: GET

Pulls sales data from Snowflake, runs ML models for demand prediction, updates SAP MRP, generates reports in Power BI, and notifies planners.

naftiko: "0.5"
info:
  label: "Supply Chain Demand Forecasting"
  description: "Pulls sales data from Snowflake, runs ML models for demand prediction, updates SAP MRP, generates reports in Power BI, and notifies planners."
  tags:
    - supply-chain
    - snowflake
    - sap
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: supply-chain
      port: 8080
      tools:
        - name: supply_chain_demand_forecasting
          description: "Orchestrate supply chain demand forecasting workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-sap
              type: call
              call: "sap.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://adidas-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST

When SAP detects a supplier delay, creates a ServiceNow incident, notifies the supply chain team in Microsoft Teams, and logs a risk entry in SAP S/4HANA.

naftiko: "0.5"
info:
  label: "Supply Chain Disruption Alert"
  description: "When SAP detects a supplier delay, creates a ServiceNow incident, notifies the supply chain team in Microsoft Teams, and logs a risk entry in SAP S/4HANA."
  tags:
    - supply-chain
    - sap-s4hana
    - servicenow
    - microsoft-teams
    - risk-management
capability:
  exposes:
    - type: mcp
      namespace: supply-chain
      port: 8080
      tools:
        - name: handle-disruption
          description: "Given a supplier ID and delay details, create incident, notify the team, and log a supply chain risk."
          inputParameters:
            - name: supplier_id
              in: body
              type: string
              description: "The SAP supplier business partner ID."
            - name: delay_days
              in: body
              type: string
              description: "Number of days the shipment is delayed."
            - name: affected_materials
              in: body
              type: string
              description: "Comma-separated list of affected material numbers."
          steps:
            - name: get-supplier
              type: call
              call: "sap.get-supplier"
              with:
                supplier_id: "{{supplier_id}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Supply chain delay: {{get-supplier.name}} — {{delay_days}} days"
                category: "supply_chain"
                priority: "2"
                description: "Supplier {{get-supplier.name}} ({{supplier_id}}) delayed by {{delay_days}} days. Affected materials: {{affected_materials}}."
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel: "supply-chain-alerts"
                text: "Supplier Delay Alert: {{get-supplier.name}} | Delay: {{delay_days}} days | Materials: {{affected_materials}} | Incident: {{create-incident.number}}"
            - name: log-risk
              type: call
              call: "sap.create-risk-entry"
              with:
                supplier_id: "{{supplier_id}}"
                risk_type: "DELIVERY_DELAY"
                severity: "HIGH"
                description: "{{delay_days}} day delay affecting materials: {{affected_materials}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://adidas-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: suppliers
          path: "/A_Supplier('{{supplier_id}}')"
          inputParameters:
            - name: supplier_id
              in: path
          operations:
            - name: get-supplier
              method: GET
        - name: risk-entries
          path: "/A_SupplierRisk"
          operations:
            - name: create-risk-entry
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.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: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          operations:
            - name: send-message
              method: POST

Collects carbon footprint data from SAP, aggregates in Snowflake, generates ESG reports in Power BI, and publishes to sustainability team.

naftiko: "0.5"
info:
  label: "Sustainability Metrics Collection Pipeline"
  description: "Collects carbon footprint data from SAP, aggregates in Snowflake, generates ESG reports in Power BI, and publishes to sustainability team."
  tags:
    - sustainability
    - sap
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: sustainability
      port: 8080
      tools:
        - name: sustainability_metrics_collector
          description: "Orchestrate sustainability metrics collection pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-servicenow
              type: call
              call: "servicenow.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: sap
      baseUri: "https://adidas-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST

Collects carbon footprint data from SAP, energy usage from Oracle Cloud, and supply chain metrics from SAP BW, then publishes a sustainability dashboard to Google Sheets and notifies leadership in Teams.

naftiko: "0.5"
info:
  label: "Sustainability Reporting Pipeline"
  description: "Collects carbon footprint data from SAP, energy usage from Oracle Cloud, and supply chain metrics from SAP BW, then publishes a sustainability dashboard to Google Sheets and notifies leadership in Teams."
  tags:
    - sustainability
    - sap-s4hana
    - oracle-cloud
    - sap-bw
    - google-sheets
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: sustainability
      port: 8080
      tools:
        - name: generate-sustainability-report
          description: "Given a fiscal period, collect sustainability metrics from all sources and publish a consolidated report."
          inputParameters:
            - name: fiscal_period
              in: body
              type: string
              description: "The fiscal period (e.g. 2026-Q1)."
            - name: spreadsheet_id
              in: body
              type: string
              description: "Google Sheets ID for the sustainability dashboard."
          steps:
            - name: get-carbon-data
              type: call
              call: "sap.get-carbon-footprint"
              with:
                period: "{{fiscal_period}}"
            - name: get-energy-usage
              type: call
              call: "oracle-cloud.get-energy-metrics"
              with:
                period: "{{fiscal_period}}"
            - name: get-supply-chain-metrics
              type: call
              call: "sap-bw.get-sustainability-kpis"
              with:
                period: "{{fiscal_period}}"
            - name: update-dashboard
              type: call
              call: "gsheets.update-range"
              with:
                spreadsheet_id: "{{spreadsheet_id}}"
                range: "Dashboard!A2"
                values: "{{fiscal_period}},{{get-carbon-data.total_co2_tons}},{{get-energy-usage.kwh_total}},{{get-supply-chain-metrics.recycled_materials_pct}},{{get-supply-chain-metrics.sustainable_suppliers_pct}}"
            - name: notify-leadership
              type: call
              call: "msteams.send-message"
              with:
                channel: "sustainability-leadership"
                text: "Sustainability Report: {{fiscal_period}} | CO2: {{get-carbon-data.total_co2_tons}} tons | Energy: {{get-energy-usage.kwh_total}} kWh | Recycled Materials: {{get-supply-chain-metrics.recycled_materials_pct}}% | Sustainable Suppliers: {{get-supply-chain-metrics.sustainable_suppliers_pct}}%"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://adidas-s4.sap.com/sap/opu/odata/sap/API_SUSTAINABILITY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: carbon
          path: "/A_CarbonFootprint"
          operations:
            - name: get-carbon-footprint
              method: GET
    - type: http
      namespace: oracle-cloud
      baseUri: "https://cloud.oracle.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: energy
          path: "/sustainability/energy"
          operations:
            - name: get-energy-metrics
              method: GET
    - type: http
      namespace: sap-bw
      baseUri: "https://adidas-bw.sap.com/sap/bw/odata/v1"
      authentication:
        type: basic
        username: "$secrets.sap_bw_user"
        password: "$secrets.sap_bw_password"
      resources:
        - name: sustainability
          path: "/ZSUSTAINABILITY_KPI"
          operations:
            - name: get-sustainability-kpis
              method: GET
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: values
          path: "/{{spreadsheet_id}}/values/{{range}}"
          inputParameters:
            - name: spreadsheet_id
              in: path
            - name: range
              in: path
          operations:
            - name: update-range
              method: PUT
    - 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"
          operations:
            - name: send-message
              method: POST

Queries the Teradata data warehouse for store-level sales performance by location and date range.

naftiko: "0.5"
info:
  label: "Teradata Retail Analytics Query"
  description: "Queries the Teradata data warehouse for store-level sales performance by location and date range."
  tags:
    - analytics
    - teradata
    - retail
capability:
  exposes:
    - type: mcp
      namespace: retail-analytics
      port: 8080
      tools:
        - name: query-store-sales
          description: "Run a store-level sales query in Teradata by store ID and date range."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The Adidas retail store identifier."
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "End date in YYYY-MM-DD format."
          call: "teradata.run-query"
          with:
            store_id: "{{store_id}}"
            start_date: "{{start_date}}"
            end_date: "{{end_date}}"
          outputParameters:
            - name: total_revenue
              type: string
              mapping: "$.results[0].TOTAL_REVENUE"
            - name: transactions
              type: string
              mapping: "$.results[0].TRANSACTION_COUNT"
            - name: avg_basket_size
              type: string
              mapping: "$.results[0].AVG_BASKET"
  consumes:
    - type: http
      namespace: teradata
      baseUri: "https://teradata.adidas.internal/api/v1"
      authentication:
        type: basic
        username: "$secrets.teradata_user"
        password: "$secrets.teradata_password"
      resources:
        - name: queries
          path: "/queries"
          operations:
            - name: run-query
              method: POST

Runs a Terraform plan via GitHub Actions, detects drift, opens a ServiceNow change request, and alerts the infrastructure team in Teams.

naftiko: "0.5"
info:
  label: "Terraform Drift Detection and Remediation"
  description: "Runs a Terraform plan via GitHub Actions, detects drift, opens a ServiceNow change request, and alerts the infrastructure team in Teams."
  tags:
    - infrastructure
    - terraform
    - github-actions
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: iac-drift
      port: 8080
      tools:
        - name: detect-and-remediate-drift
          description: "Given a Terraform workspace, run a plan, detect drift, and open a change request if drift is found."
          inputParameters:
            - name: workspace
              in: body
              type: string
              description: "The Terraform Cloud workspace name."
            - name: repository
              in: body
              type: string
              description: "The GitHub repository containing the Terraform code."
          steps:
            - name: trigger-plan
              type: call
              call: "github-actions.trigger-workflow"
              with:
                repository: "{{repository}}"
                workflow_id: "terraform-plan.yml"
                ref: "main"
                inputs_workspace: "{{workspace}}"
            - name: open-change-request
              type: call
              call: "servicenow.create-change-request"
              with:
                short_description: "Terraform drift detected: {{workspace}}"
                category: "infrastructure"
                description: "Drift detected in workspace {{workspace}}. Plan run: {{trigger-plan.run_id}}. Repository: {{repository}}."
                risk: "moderate"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel: "infra-ops"
                text: "Terraform Drift: {{workspace}} | Change Request: {{open-change-request.number}} | Plan: {{trigger-plan.run_id}} | Repo: {{repository}}"
  consumes:
    - type: http
      namespace: github-actions
      baseUri: "https://api.github.com/repos"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: workflows
          path: "/{{repository}}/actions/workflows/{{workflow_id}}/dispatches"
          inputParameters:
            - name: repository
              in: path
            - name: workflow_id
              in: path
          operations:
            - name: trigger-workflow
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.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-request
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          operations:
            - name: send-message
              method: POST

Pulls vendor records from Oracle E-Business Suite, cross-references compliance data in SAP, and generates an audit report in SharePoint with findings logged to ServiceNow.

naftiko: "0.5"
info:
  label: "Vendor Compliance Audit"
  description: "Pulls vendor records from Oracle E-Business Suite, cross-references compliance data in SAP, and generates an audit report in SharePoint with findings logged to ServiceNow."
  tags:
    - compliance
    - oracle-e-business-suite
    - sap-s4hana
    - sharepoint
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: vendor-compliance
      port: 8080
      tools:
        - name: run-vendor-audit
          description: "Given a vendor ID, pull records from Oracle and SAP, then generate an audit report and log findings."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "The vendor identifier."
            - name: audit_type
              in: body
              type: string
              description: "Type of audit (sustainability, labor, quality)."
          steps:
            - name: get-oracle-vendor
              type: call
              call: "oracle.get-vendor"
              with:
                vendor_id: "{{vendor_id}}"
            - name: get-sap-compliance
              type: call
              call: "sap.get-vendor-compliance"
              with:
                vendor_id: "{{vendor_id}}"
                audit_type: "{{audit_type}}"
            - name: create-report
              type: call
              call: "sharepoint.create-file"
              with:
                site_id: "compliance_audits"
                folder_path: "Vendors/{{get-oracle-vendor.vendor_name}}"
                file_name: "audit_{{audit_type}}_report.docx"
                content: "Vendor: {{get-oracle-vendor.vendor_name}} | Type: {{audit_type}} | Score: {{get-sap-compliance.score}} | Findings: {{get-sap-compliance.findings_count}}"
            - name: log-findings
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Vendor audit: {{get-oracle-vendor.vendor_name}} — {{audit_type}}"
                category: "compliance"
                description: "Score: {{get-sap-compliance.score}}. Findings: {{get-sap-compliance.findings_count}}. Report: {{create-report.url}}"
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://oracle-ebs.adidas.com/webservices/rest/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_user"
        password: "$secrets.oracle_password"
      resources:
        - name: vendors
          path: "/vendors/{{vendor_id}}"
          inputParameters:
            - name: vendor_id
              in: path
          operations:
            - name: get-vendor
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://adidas-s4.sap.com/sap/opu/odata/sap/API_BUSINESS_PARTNER"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: compliance
          path: "/A_Supplier('{{vendor_id}}')/to_ComplianceData"
          inputParameters:
            - name: vendor_id
              in: path
          operations:
            - name: get-vendor-compliance
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: drive-items
          path: "/{{site_id}}/drive/root:/{{folder_path}}/{{file_name}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
            - name: file_name
              in: path
          operations:
            - name: create-file
              method: PUT
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.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

Collects vendor delivery data from SAP, calculates scores in Snowflake, updates Salesforce vendor records, and notifies procurement.

naftiko: "0.5"
info:
  label: "Vendor Performance Scorecard Pipeline"
  description: "Collects vendor delivery data from SAP, calculates scores in Snowflake, updates Salesforce vendor records, and notifies procurement."
  tags:
    - procurement
    - sap
    - snowflake
    - salesforce
    - slack
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: vendor_performance_scorecard_pipeline
          description: "Orchestrate vendor performance scorecard pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-salesforce
              type: call
              call: "salesforce.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: sap
      baseUri: "https://adidas-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://adidas.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Monitors equipment telemetry in Datadog, predicts maintenance needs in Snowflake, creates work orders in ServiceNow, and notifies facility team.

naftiko: "0.5"
info:
  label: "Warehouse Equipment Maintenance Pipeline"
  description: "Monitors equipment telemetry in Datadog, predicts maintenance needs in Snowflake, creates work orders in ServiceNow, and notifies facility team."
  tags:
    - maintenance
    - datadog
    - snowflake
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: maintenance
      port: 8080
      tools:
        - name: warehouse_equipment_maintenance_pipeline
          description: "Orchestrate warehouse equipment maintenance pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-datadog
              type: call
              call: "datadog.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-servicenow
              type: call
              call: "servicenow.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        header: "DD-API-KEY" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: datadog-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://adidas.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: servicenow-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Forecasts volume from Snowflake, optimizes shifts in Workday, syncs schedules to SAP, updates Grafana dashboards, and notifies warehouse managers.

naftiko: "0.5"
info:
  label: "Warehouse Labor Scheduling Pipeline"
  description: "Forecasts volume from Snowflake, optimizes shifts in Workday, syncs schedules to SAP, updates Grafana dashboards, and notifies warehouse managers."
  tags:
    - logistics
    - snowflake
    - workday
    - sap
    - grafana
capability:
  exposes:
    - type: mcp
      namespace: logistics
      port: 8080
      tools:
        - name: warehouse_labor_scheduling_pipeline
          description: "Orchestrate warehouse labor scheduling pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-snowflake
              type: call
              call: "snowflake.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-workday
              type: call
              call: "workday.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-sap
              type: call
              call: "sap.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-grafana
              type: call
              call: "grafana.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/adidas"
      authentication:
        type: bearer
        token: "$secrets.workday_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: workday-op
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://adidas-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: grafana
      baseUri: "https://adidas-grafana.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_api_key" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: grafana-op
              method: POST

Monitors warehouse KPIs from SAP, analyzes bottlenecks in Snowflake, creates improvement tasks in Jira, updates Grafana dashboards, and alerts ops.

naftiko: "0.5"
info:
  label: "Warehouse Operations Optimization"
  description: "Monitors warehouse KPIs from SAP, analyzes bottlenecks in Snowflake, creates improvement tasks in Jira, updates Grafana dashboards, and alerts ops."
  tags:
    - logistics
    - sap
    - snowflake
    - jira
    - grafana
capability:
  exposes:
    - type: mcp
      namespace: logistics
      port: 8080
      tools:
        - name: warehouse_operations_optimization
          description: "Orchestrate warehouse operations optimization workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-sap
              type: call
              call: "sap.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-jira
              type: call
              call: "jira.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-grafana
              type: call
              call: "grafana.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: sap
      baseUri: "https://adidas-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://adidas.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: jira-op
              method: POST
    - type: http
      namespace: grafana
      baseUri: "https://adidas-grafana.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_api_key" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: grafana-op
              method: POST

When SAP S/4HANA detects inventory below safety stock, generates a purchase requisition, notifies the procurement team in Teams, and logs it in a Google Sheet tracker.

naftiko: "0.5"
info:
  label: "Warehouse Replenishment Orchestrator"
  description: "When SAP S/4HANA detects inventory below safety stock, generates a purchase requisition, notifies the procurement team in Teams, and logs it in a Google Sheet tracker."
  tags:
    - supply-chain
    - replenishment
    - sap-s4hana
    - microsoft-teams
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: replenishment
      port: 8080
      tools:
        - name: trigger-replenishment
          description: "Given a material number and plant, create a purchase requisition, notify procurement, and log the event."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "The SAP material number."
            - name: plant
              in: body
              type: string
              description: "The SAP plant code."
            - name: current_stock
              in: body
              type: string
              description: "Current on-hand quantity."
            - name: reorder_quantity
              in: body
              type: string
              description: "Quantity to reorder."
          steps:
            - name: create-pr
              type: call
              call: "sap.create-purchase-requisition"
              with:
                material: "{{material_number}}"
                plant: "{{plant}}"
                quantity: "{{reorder_quantity}}"
                requisition_type: "NB"
            - name: notify-procurement
              type: call
              call: "msteams.send-message"
              with:
                channel: "procurement-alerts"
                text: "Replenishment Alert: Material {{material_number}} at plant {{plant}} is below safety stock ({{current_stock}} on hand). PR {{create-pr.requisition_number}} created for {{reorder_quantity}} units."
            - name: log-event
              type: call
              call: "gsheets.append-row"
              with:
                spreadsheet_id: "$secrets.replenishment_tracker_sheet"
                range: "Log!A1"
                values: "{{material_number}},{{plant}},{{current_stock}},{{reorder_quantity}},{{create-pr.requisition_number}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://adidas-s4.sap.com/sap/opu/odata/sap/API_PURCHASEREQ_PROCESS_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: requisitions
          path: "/A_PurchaseReqnHeader"
          operations:
            - name: create-purchase-requisition
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: values
          path: "/{{spreadsheet_id}}/values/{{range}}:append"
          inputParameters:
            - name: spreadsheet_id
              in: path
            - name: range
              in: path
          operations:
            - name: append-row
              method: POST

Receives a customer inquiry via WhatsApp, looks up the order in BigCommerce, fetches tracking from SAP, and replies with the order status through WhatsApp.

naftiko: "0.5"
info:
  label: "WhatsApp Customer Order Status Bot"
  description: "Receives a customer inquiry via WhatsApp, looks up the order in BigCommerce, fetches tracking from SAP, and replies with the order status through WhatsApp."
  tags:
    - customer-service
    - whatsapp
    - bigcommerce
    - sap-s4hana
capability:
  exposes:
    - type: mcp
      namespace: whatsapp-bot
      port: 8080
      tools:
        - name: handle-order-inquiry
          description: "Given a WhatsApp message with an order number, look up status and reply with tracking info."
          inputParameters:
            - name: phone_number
              in: body
              type: string
              description: "The customer WhatsApp phone number."
            - name: order_id
              in: body
              type: string
              description: "The order ID from the customer message."
          steps:
            - name: get-order
              type: call
              call: "bigcommerce.get-order"
              with:
                order_id: "{{order_id}}"
            - name: get-tracking
              type: call
              call: "sap.get-delivery-tracking"
              with:
                order_reference: "{{order_id}}"
            - name: reply-whatsapp
              type: call
              call: "whatsapp.send-message"
              with:
                to: "{{phone_number}}"
                text: "Hi! Your order #{{order_id}} is {{get-order.status}}. Tracking: {{get-tracking.tracking_number}}. Estimated delivery: {{get-tracking.estimated_delivery}}."
  consumes:
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/adidas/v2"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://adidas-s4.sap.com/sap/opu/odata/sap/API_OUTBOUND_DELIVERY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: deliveries
          path: "/A_OutbDeliveryHeader"
          operations:
            - name: get-delivery-tracking
              method: GET
    - type: http
      namespace: whatsapp
      baseUri: "https://graph.facebook.com/v18.0/$secrets.whatsapp_phone_id"
      authentication:
        type: bearer
        token: "$secrets.whatsapp_token"
      resources:
        - name: messages
          path: "/messages"
          operations:
            - name: send-message
              method: POST

Receives wholesale orders in Salesforce, validates credit in SAP, creates fulfillment orders, updates Snowflake analytics, and notifies sales.

naftiko: "0.5"
info:
  label: "Wholesale Order Processing Pipeline"
  description: "Receives wholesale orders in Salesforce, validates credit in SAP, creates fulfillment orders, updates Snowflake analytics, and notifies sales."
  tags:
    - wholesale
    - salesforce
    - sap
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: wholesale
      port: 8080
      tools:
        - name: wholesale_order_processing_pipeline
          description: "Orchestrate wholesale order processing pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-salesforce
              type: call
              call: "salesforce.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-sap
              type: call
              call: "sap.process-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: create-snowflake
              type: call
              call: "snowflake.create-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: notify-slack
              type: call
              call: "slack.notify-resource"
              with:
                resource_id: "{{resource_id}}"

  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://adidas.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: salesforce-op
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://adidas-sap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: sap-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://adidas.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: snowflake-op
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: slack-op
              method: POST

Retrieves employee profile from Workday at Adidas.

naftiko: "0.5"
info:
  label: "Workday Employee Lookup"
  description: "Retrieves employee profile from Workday at Adidas."
  tags:
    - hr
    - workday
    - employee-data
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-employee
          description: "Look up Workday employee at Adidas."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The employee_id to look up." 
          call: "workday.get-employee_id"
          with:
            employee_id: "{{employee_id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/adidas"
      authentication:
        type: bearer
        token: "$secrets.workday_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: workday_employee_lookup
              method: GET

Retrieves a Zendesk support ticket by ID including status, priority, assignee, and customer satisfaction rating. Used by customer service managers.

naftiko: "0.5"
info:
  label: "Zendesk Ticket Lookup"
  description: "Retrieves a Zendesk support ticket by ID including status, priority, assignee, and customer satisfaction rating. Used by customer service managers."
  tags:
    - customer-service
    - zendesk
    - support
capability:
  exposes:
    - type: mcp
      namespace: support
      port: 8080
      tools:
        - name: get-ticket
          description: "Look up a Zendesk support ticket and return its status, priority, assignee, and satisfaction rating."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The Zendesk ticket ID."
          call: "zendesk.get-ticket"
          with:
            ticket_id: "{{ticket_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.ticket.status"
            - name: priority
              type: string
              mapping: "$.ticket.priority"
            - name: assignee
              type: string
              mapping: "$.ticket.assignee_id"
            - name: satisfaction_rating
              type: string
              mapping: "$.ticket.satisfaction_rating.score"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://adidas.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets/{{ticket_id}}.json"
          inputParameters:
            - name: ticket_id
              in: path
          operations:
            - name: get-ticket
              method: GET