Adidas Capabilities
Naftiko 0.5 capability definitions for Adidas - 100 capabilities showing integration workflows and service orchestrations.
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