Aéropostale Capabilities

Naftiko 0.5 capability definitions for Aéropostale - 100 capabilities showing integration workflows and service orchestrations.

Sort
Expand

When a Shopify cart is abandoned for more than two hours, triggers a recovery email via MailChimp with a personalized discount code and logs the attempt in Google Sheets.

naftiko: "0.5"
info:
  label: "Abandoned Cart Recovery Workflow"
  description: "When a Shopify cart is abandoned for more than two hours, triggers a recovery email via MailChimp with a personalized discount code and logs the attempt in Google Sheets."
  tags:
    - e-commerce
    - marketing
    - shopify
    - mailchimp
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: cart-recovery
      port: 8080
      tools:
        - name: recover-abandoned-cart
          description: "Send a personalized recovery email for an abandoned cart and track the outreach."
          inputParameters:
            - name: checkout_id
              in: body
              type: string
              description: "Shopify abandoned checkout ID."
            - name: customer_email
              in: body
              type: string
              description: "Customer email address."
            - name: discount_code
              in: body
              type: string
              description: "Discount code to include in the recovery email."
          steps:
            - name: get-checkout
              type: call
              call: "shopify.get-abandoned-checkout"
              with:
                checkout_id: "{{checkout_id}}"
            - name: send-recovery
              type: call
              call: "mailchimp.send-transactional"
              with:
                template: "cart_recovery"
                to_email: "{{customer_email}}"
                merge_vars:
                  cart_url: "{{get-checkout.recovery_url}}"
                  discount_code: "{{discount_code}}"
                  cart_total: "{{get-checkout.total_price}}"
            - name: log-attempt
              type: call
              call: "gsheets.append-row"
              with:
                spreadsheet_id: "aero_cart_recovery"
                range: "Attempts!A:D"
                values:
                  - "{{checkout_id}}"
                  - "{{customer_email}}"
                  - "{{discount_code}}"
                  - "sent"
  consumes:
    - type: http
      namespace: shopify
      baseUri: "https://aeropostale.myshopify.com/admin/api/2024-01"
      authentication:
        type: bearer
        token: "$secrets.shopify_token"
      resources:
        - name: checkouts
          path: "/checkouts/{{checkout_id}}.json"
          inputParameters:
            - name: checkout_id
              in: path
          operations:
            - name: get-abandoned-checkout
              method: GET
    - type: http
      namespace: mailchimp
      baseUri: "https://mandrillapp.com/api/1.0"
      authentication:
        type: apikey
        key: "$secrets.mailchimp_transactional_key"
      resources:
        - name: messages
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              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

Collects access entitlements, routes for review, revokes expired access, and creates audit records.

naftiko: "0.5"
info:
  label: "Access Review Certification Pipeline"
  description: "Collects access entitlements, routes for review, revokes expired access, and creates audit records."
  tags:
    - security
    - okta
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: access_review_certification_pipeline
          description: "Orchestrate access review certification 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-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                data: "{{get-salesforce.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Access Review Certification Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://aeropostale.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://aeropostale.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 current monitoring alert status. Used by Aeropostale teams.

naftiko: "0.5"
info:
  label: "Aeropostale Alert Status Check"
  description: "Retrieves current monitoring alert status. Used by Aeropostale teams."
  tags:
    - retail
    - powerbi
capability:
  exposes:
    - type: mcp
      namespace: powerbi
      port: 8080
      tools:
        - name: get-alert_status_check
          description: "Retrieves current monitoring alert status. Used by Aeropostale teams."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "The alert_id to look up." 
          call: "powerbi.get-alert_id"
          with:
            alert_id: "{{alert_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: aeropostale_alert_status_check
              method: GET

Checks availability of an API endpoint. Used by Aeropostale teams.

naftiko: "0.5"
info:
  label: "Aeropostale API Endpoint Status"
  description: "Checks availability of an API endpoint. Used by Aeropostale teams."
  tags:
    - retail
    - grafana
capability:
  exposes:
    - type: mcp
      namespace: grafana
      port: 8080
      tools:
        - name: get-api_endpoint_status
          description: "Checks availability of an API endpoint. Used by Aeropostale teams."
          inputParameters:
            - name: endpoint_url
              in: body
              type: string
              description: "The endpoint_url to look up." 
          call: "grafana.get-endpoint_url"
          with:
            endpoint_url: "{{endpoint_url}}"
  consumes:
    - type: http
      namespace: grafana
      baseUri: "https://aeropostale-grafana.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_api_key" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: aeropostale_api_endpoint_statu
              method: GET

Retrieves compliance check status. Used by Aeropostale teams.

naftiko: "0.5"
info:
  label: "Aeropostale Compliance Check Status"
  description: "Retrieves compliance check status. Used by Aeropostale teams."
  tags:
    - retail
    - zendesk
capability:
  exposes:
    - type: mcp
      namespace: zendesk
      port: 8080
      tools:
        - name: get-compliance_check_status
          description: "Retrieves compliance check status. Used by Aeropostale teams."
          inputParameters:
            - name: check_id
              in: body
              type: string
              description: "The check_id to look up." 
          call: "zendesk.get-check_id"
          with:
            check_id: "{{check_id}}"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://aeropostale.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: aeropostale_compliance_check_s
              method: GET

Queries cost and spending data. Used by Aeropostale teams.

naftiko: "0.5"
info:
  label: "Aeropostale Cost Report Query"
  description: "Queries cost and spending data. Used by Aeropostale teams."
  tags:
    - retail
    - stripe
capability:
  exposes:
    - type: mcp
      namespace: stripe
      port: 8080
      tools:
        - name: get-cost_report_query
          description: "Queries cost and spending data. Used by Aeropostale teams."
          inputParameters:
            - name: cost_center
              in: body
              type: string
              description: "The cost_center to look up." 
          call: "stripe.get-cost_center"
          with:
            cost_center: "{{cost_center}}"
  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: aeropostale_cost_report_query
              method: GET

Analyzes customer behavior, predicts churn risk, triggers retention campaigns, and tracks results.

naftiko: "0.5"
info:
  label: "Customer Churn Prediction Pipeline"
  description: "Analyzes customer behavior, predicts churn risk, triggers retention campaigns, and tracks results."
  tags:
    - analytics
    - snowflake
    - hubspot
    - slack
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: aeropostale_customer_churn_prediction_pi
          description: "Orchestrate customer churn prediction 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-hubspot
              type: call
              call: "hubspot.process-resource"
              with:
                data: "{{get-snowflake.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Customer Churn Prediction Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://aeropostale.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

Executes a read-only analytics query. Used by Aeropostale teams.

naftiko: "0.5"
info:
  label: "Aeropostale Database Query Runner"
  description: "Executes a read-only analytics query. Used by Aeropostale teams."
  tags:
    - retail
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: datadog
      port: 8080
      tools:
        - name: get-database_query_runner
          description: "Executes a read-only analytics query. Used by Aeropostale teams."
          inputParameters:
            - name: sql_query
              in: body
              type: string
              description: "The sql_query to look up." 
          call: "datadog.get-sql_query"
          with:
            sql_query: "{{sql_query}}"
  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: aeropostale_database_query_run
              method: GET

Checks status of a recent deployment. Used by Aeropostale teams.

naftiko: "0.5"
info:
  label: "Aeropostale Deployment Status Check"
  description: "Checks status of a recent deployment. Used by Aeropostale teams."
  tags:
    - retail
    - elasticsearch
capability:
  exposes:
    - type: mcp
      namespace: elasticsearc
      port: 8080
      tools:
        - name: get-deployment_status_check
          description: "Checks status of a recent deployment. Used by Aeropostale teams."
          inputParameters:
            - name: deployment_id
              in: body
              type: string
              description: "The deployment_id to look up." 
          call: "elasticsearch.get-deployment_id"
          with:
            deployment_id: "{{deployment_id}}"
  consumes:
    - type: http
      namespace: elasticsearch
      baseUri: "https://aeropostale-es.com:9200"
      authentication:
        type: bearer
        token: "$secrets.elasticsearch_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: aeropostale_deployment_status_
              method: GET

Retrieves a document from knowledge management. Used by Aeropostale teams.

naftiko: "0.5"
info:
  label: "Aeropostale Document Retrieval"
  description: "Retrieves a document from knowledge management. Used by Aeropostale teams."
  tags:
    - retail
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: confluence
      port: 8080
      tools:
        - name: get-document_retrieval
          description: "Retrieves a document from knowledge management. Used by Aeropostale teams."
          inputParameters:
            - name: document_id
              in: body
              type: string
              description: "The document_id to look up." 
          call: "confluence.get-document_id"
          with:
            document_id: "{{document_id}}"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://aeropostale.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: aeropostale_document_retrieval
              method: GET

Provisions new employee accounts, assigns training, creates IT tickets, and notifies managers.

naftiko: "0.5"
info:
  label: "Employee Onboarding Automation Pipeline"
  description: "Provisions new employee accounts, assigns training, creates IT tickets, and notifies managers."
  tags:
    - hr
    - workday
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: aeropostale_employee_onboarding_automati
          description: "Orchestrate employee onboarding automation 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-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                data: "{{get-workday.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Employee Onboarding Automation Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/aeropostale"
      authentication:
        type: bearer
        token: "$secrets.workday_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: workday-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://aeropostale.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

Queries metric values from a monitoring dashboard. Used by Aeropostale teams.

naftiko: "0.5"
info:
  label: "Aeropostale Metric Dashboard Query"
  description: "Queries metric values from a monitoring dashboard. Used by Aeropostale teams."
  tags:
    - retail
    - jira
capability:
  exposes:
    - type: mcp
      namespace: jira
      port: 8080
      tools:
        - name: get-metric_dashboard_query
          description: "Queries metric values from a monitoring dashboard. Used by Aeropostale teams."
          inputParameters:
            - name: metric_name
              in: body
              type: string
              description: "The metric_name to look up." 
          call: "jira.get-metric_name"
          with:
            metric_name: "{{metric_name}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://aeropostale.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: aeropostale_jira_metric_dashbo
              method: GET

Searches application logs for matching patterns. Used by Aeropostale teams.

naftiko: "0.5"
info:
  label: "Aeropostale Log Search Query"
  description: "Searches application logs for matching patterns. Used by Aeropostale teams."
  tags:
    - retail
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: servicenow
      port: 8080
      tools:
        - name: get-log_search_query
          description: "Searches application logs for matching patterns. Used by Aeropostale teams."
          inputParameters:
            - name: search_query
              in: body
              type: string
              description: "The search_query to look up." 
          call: "servicenow.get-search_query"
          with:
            search_query: "{{search_query}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://aeropostale.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: aeropostale_log_search_query
              method: GET

Queries metric values from a monitoring dashboard. Used by Aeropostale teams.

naftiko: "0.5"
info:
  label: "Aeropostale Metric Dashboard Query"
  description: "Queries metric values from a monitoring dashboard. Used by Aeropostale teams."
  tags:
    - retail
    - jira
capability:
  exposes:
    - type: mcp
      namespace: jira
      port: 8080
      tools:
        - name: get-metric_dashboard_query
          description: "Queries metric values from a monitoring dashboard. Used by Aeropostale teams."
          inputParameters:
            - name: metric_name
              in: body
              type: string
              description: "The metric_name to look up." 
          call: "jira.get-metric_name"
          with:
            metric_name: "{{metric_name}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://aeropostale.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: aeropostale_metric_dashboard_q
              method: GET

Synchronizes inventory across channels, resolves discrepancies, and updates all systems.

naftiko: "0.5"
info:
  label: "Omnichannel Inventory Sync Pipeline"
  description: "Synchronizes inventory across channels, resolves discrepancies, and updates all systems."
  tags:
    - inventory
    - salesforce
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: inventory
      port: 8080
      tools:
        - name: aeropostale_omnichannel_inventory_sync_p
          description: "Orchestrate omnichannel inventory sync 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-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                data: "{{get-salesforce.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Omnichannel Inventory Sync Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://aeropostale.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://aeropostale.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

Checks the current status of a project. Used by Aeropostale teams.

naftiko: "0.5"
info:
  label: "Aeropostale Project Status Check"
  description: "Checks the current status of a project. Used by Aeropostale teams."
  tags:
    - retail
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: hubspot
      port: 8080
      tools:
        - name: get-project_status_check
          description: "Checks the current status of a project. Used by Aeropostale teams."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "The project_key to look up." 
          call: "hubspot.get-project_key"
          with:
            project_key: "{{project_key}}"
  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: aeropostale_project_status_che
              method: GET

Retrieves code repository information. Used by Aeropostale teams.

naftiko: "0.5"
info:
  label: "Aeropostale Repository Info Lookup"
  description: "Retrieves code repository information. Used by Aeropostale teams."
  tags:
    - retail
    - workday
capability:
  exposes:
    - type: mcp
      namespace: workday
      port: 8080
      tools:
        - name: get-repository_info_lookup
          description: "Retrieves code repository information. Used by Aeropostale teams."
          inputParameters:
            - name: repo_name
              in: body
              type: string
              description: "The repo_name to look up." 
          call: "workday.get-repo_name"
          with:
            repo_name: "{{repo_name}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/aeropostale"
      authentication:
        type: bearer
        token: "$secrets.workday_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: aeropostale_repository_info_lo
              method: GET

Checks the health status of a monitored service. Used by Aeropostale teams.

naftiko: "0.5"
info:
  label: "Aeropostale Service Health Check"
  description: "Checks the health status of a monitored service. Used by Aeropostale teams."
  tags:
    - retail
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: salesforce
      port: 8080
      tools:
        - name: get-service_health_check
          description: "Checks the health status of a monitored service. Used by Aeropostale teams."
          inputParameters:
            - name: health_target
              in: body
              type: string
              description: "The health_target to look up." 
          call: "salesforce.get-health_target"
          with:
            health_target: "{{health_target}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://aeropostale.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: aeropostale_salesforce_service
              method: GET

Runs demand forecast models, generates buy recommendations, and distributes to merchandising teams.

naftiko: "0.5"
info:
  label: "Seasonal Demand Forecasting Pipeline"
  description: "Runs demand forecast models, generates buy recommendations, and distributes to merchandising teams."
  tags:
    - planning
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: planning
      port: 8080
      tools:
        - name: aeropostale_seasonal_demand_forecasting_
          description: "Orchestrate seasonal demand forecasting 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-powerbi
              type: call
              call: "powerbi.process-resource"
              with:
                data: "{{get-snowflake.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Seasonal Demand Forecasting Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://aeropostale.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: 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: powerbi-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

Detects security incidents, enriches with context, creates response tickets, and notifies the SOC.

naftiko: "0.5"
info:
  label: "Security Incident Response Pipeline"
  description: "Detects security incidents, enriches with context, creates response tickets, and notifies the SOC."
  tags:
    - security
    - splunk
    - servicenow
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: aeropostale_security_incident_response_p
          description: "Orchestrate security incident response 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-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                data: "{{get-salesforce.result}}"
            - name: create-jira
              type: call
              call: "jira.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Security Incident Response Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://aeropostale.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://aeropostale.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://aeropostale.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

Retrieves vulnerability scan results. Used by Aeropostale teams.

naftiko: "0.5"
info:
  label: "Aeropostale Security Scan Results"
  description: "Retrieves vulnerability scan results. Used by Aeropostale teams."
  tags:
    - retail
    - github
capability:
  exposes:
    - type: mcp
      namespace: github
      port: 8080
      tools:
        - name: get-security_scan_results
          description: "Retrieves vulnerability scan results. Used by Aeropostale teams."
          inputParameters:
            - name: scan_id
              in: body
              type: string
              description: "The scan_id to look up." 
          call: "github.get-scan_id"
          with:
            scan_id: "{{scan_id}}"
  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: aeropostale_security_scan_resu
              method: GET

Checks the health status of a monitored service. Used by Aeropostale teams.

naftiko: "0.5"
info:
  label: "Aeropostale Service Health Check"
  description: "Checks the health status of a monitored service. Used by Aeropostale teams."
  tags:
    - retail
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: salesforce
      port: 8080
      tools:
        - name: get-service_health_check
          description: "Checks the health status of a monitored service. Used by Aeropostale teams."
          inputParameters:
            - name: health_target
              in: body
              type: string
              description: "The health_target to look up." 
          call: "salesforce.get-health_target"
          with:
            health_target: "{{health_target}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://aeropostale.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: aeropostale_service_health_che
              method: GET

Searches application logs for matching patterns. Used by Aeropostale teams.

naftiko: "0.5"
info:
  label: "Aeropostale Log Search Query"
  description: "Searches application logs for matching patterns. Used by Aeropostale teams."
  tags:
    - retail
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: servicenow
      port: 8080
      tools:
        - name: get-log_search_query
          description: "Searches application logs for matching patterns. Used by Aeropostale teams."
          inputParameters:
            - name: search_query
              in: body
              type: string
              description: "The search_query to look up." 
          call: "servicenow.get-search_query"
          with:
            search_query: "{{search_query}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://aeropostale.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: aeropostale_servicenow_log_sea
              method: GET

Compares store metrics against benchmarks, identifies top and bottom performers, and distributes reports.

naftiko: "0.5"
info:
  label: "Store Performance Benchmark Pipeline"
  description: "Compares store metrics against benchmarks, identifies top and bottom performers, and distributes reports."
  tags:
    - analytics
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: aeropostale_store_performance_benchmark_
          description: "Orchestrate store performance benchmark 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-powerbi
              type: call
              call: "powerbi.process-resource"
              with:
                data: "{{get-snowflake.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Store Performance Benchmark Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://aeropostale.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: 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: powerbi-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 the details of a support ticket. Used by Aeropostale teams.

naftiko: "0.5"
info:
  label: "Aeropostale Ticket Details Lookup"
  description: "Retrieves the details of a support ticket. Used by Aeropostale teams."
  tags:
    - retail
    - slack
capability:
  exposes:
    - type: mcp
      namespace: slack
      port: 8080
      tools:
        - name: get-ticket_details_lookup
          description: "Retrieves the details of a support ticket. Used by Aeropostale teams."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The ticket_id to look up." 
          call: "slack.get-ticket_id"
          with:
            ticket_id: "{{ticket_id}}"
  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: aeropostale_ticket_details_loo
              method: GET

Retrieves user account details from the directory. Used by Aeropostale teams.

naftiko: "0.5"
info:
  label: "Aeropostale User Account Lookup"
  description: "Retrieves user account details from the directory. Used by Aeropostale teams."
  tags:
    - retail
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: snowflake
      port: 8080
      tools:
        - name: get-user_account_lookup
          description: "Retrieves user account details from the directory. Used by Aeropostale teams."
          inputParameters:
            - name: user_id
              in: body
              type: string
              description: "The user_id to look up." 
          call: "snowflake.get-user_id"
          with:
            user_id: "{{user_id}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://aeropostale.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: aeropostale_user_account_looku
              method: GET

Reconciles vendor invoices with POs, flags discrepancies, processes payments, and sends remittances.

naftiko: "0.5"
info:
  label: "Vendor Payment Reconciliation Pipeline"
  description: "Reconciles vendor invoices with POs, flags discrepancies, processes payments, and sends remittances."
  tags:
    - finance
    - servicenow
    - salesforce
    - slack
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: aeropostale_vendor_payment_reconciliatio
          description: "Orchestrate vendor payment reconciliation pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-servicenow
              type: call
              call: "servicenow.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-salesforce
              type: call
              call: "salesforce.process-resource"
              with:
                data: "{{get-servicenow.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Vendor Payment Reconciliation Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://aeropostale.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: salesforce
      baseUri: "https://aeropostale.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

Identifies deprecated API consumers, sends migration notices, tracks adoption, and reports progress.

naftiko: "0.5"
info:
  label: "API Deprecation Notice Pipeline"
  description: "Identifies deprecated API consumers, sends migration notices, tracks adoption, and reports progress."
  tags:
    - engineering
    - datadog
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: engineering
      port: 8080
      tools:
        - name: api_deprecation_notice_pipeline
          description: "Orchestrate api deprecation notice 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-jira
              type: call
              call: "jira.process-resource"
              with:
                data: "{{get-datadog.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "API Deprecation Notice Pipeline step 3 complete."

  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: jira
      baseUri: "https://aeropostale.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

Launches a back-to-school marketing blitz by scheduling an email campaign in MailChimp, creating Instagram and Facebook ad campaigns, and posting a countdown message to the store operations Teams channel.

naftiko: "0.5"
info:
  label: "Back-to-School Campaign Orchestrator"
  description: "Launches a back-to-school marketing blitz by scheduling an email campaign in MailChimp, creating Instagram and Facebook ad campaigns, and posting a countdown message to the store operations Teams channel."
  tags:
    - marketing
    - campaigns
    - mailchimp
    - instagram
    - facebook
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: bts-campaign
      port: 8080
      tools:
        - name: launch-bts-campaign
          description: "Coordinate the back-to-school marketing campaign across email, social, and in-store teams."
          inputParameters:
            - name: campaign_name
              in: body
              type: string
              description: "Campaign name."
            - name: start_date
              in: body
              type: string
              description: "Campaign start date."
            - name: email_template_id
              in: body
              type: string
              description: "MailChimp template for the BTS email."
          steps:
            - name: create-email
              type: call
              call: "mailchimp.create-campaign"
              with:
                name: "{{campaign_name}}"
                template_id: "{{email_template_id}}"
                segment_id: "teen_segment"
            - name: create-ig-ad
              type: call
              call: "instagram.create-ad"
              with:
                campaign_name: "{{campaign_name}}"
                objective: "conversions"
                start_time: "{{start_date}}"
            - name: create-fb-ad
              type: call
              call: "facebook.create-ad"
              with:
                campaign_name: "{{campaign_name}}"
                objective: "conversions"
                start_time: "{{start_date}}"
            - name: notify-stores
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "store_ops"
                text: "Back-to-School campaign '{{campaign_name}}' launching {{start_date}}. Prepare in-store signage and displays."
  consumes:
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: create-campaign
              method: POST
    - type: http
      namespace: instagram
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.facebook_ads_token"
      resources:
        - name: ad-campaigns
          path: "/act_{{ad_account_id}}/campaigns"
          operations:
            - name: create-ad
              method: POST
    - type: http
      namespace: facebook
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.facebook_ads_token"
      resources:
        - name: ad-campaigns
          path: "/act_{{ad_account_id}}/campaigns"
          operations:
            - name: create-ad
              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"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Analyzes resource utilization trends, forecasts capacity needs, creates procurement requests, and reports.

naftiko: "0.5"
info:
  label: "Capacity Planning Forecast Pipeline"
  description: "Analyzes resource utilization trends, forecasts capacity needs, creates procurement requests, and reports."
  tags:
    - infrastructure
    - grafana
    - snowflake
    - powerbi
capability:
  exposes:
    - type: mcp
      namespace: infrastructure
      port: 8080
      tools:
        - name: capacity_planning_forecast_pipeline
          description: "Orchestrate capacity planning forecast pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-grafana
              type: call
              call: "grafana.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                data: "{{get-grafana.result}}"
            - name: create-powerbi
              type: call
              call: "powerbi.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Capacity Planning Forecast Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: grafana
      baseUri: "https://aeropostale-grafana.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_api_key" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: grafana-op
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://aeropostale.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: 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: powerbi-op
              method: POST

Validates change requests, routes for approval, schedules implementation, and notifies stakeholders.

naftiko: "0.5"
info:
  label: "Change Management Approval Pipeline"
  description: "Validates change requests, routes for approval, schedules implementation, and notifies stakeholders."
  tags:
    - itsm
    - servicenow
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: itsm
      port: 8080
      tools:
        - name: change_management_approval_pipeline
          description: "Orchestrate change management approval pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-servicenow
              type: call
              call: "servicenow.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-jira
              type: call
              call: "jira.process-resource"
              with:
                data: "{{get-servicenow.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Change Management Approval Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://aeropostale.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://aeropostale.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

Collects audit events, validates against policies, generates compliance reports, and notifies auditors.

naftiko: "0.5"
info:
  label: "Compliance Audit Trail Pipeline"
  description: "Collects audit events, validates against policies, generates compliance reports, and notifies auditors."
  tags:
    - compliance
    - elasticsearch
    - confluence
    - slack
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: compliance_audit_trail_pipeline
          description: "Orchestrate compliance audit trail pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-elasticsearch
              type: call
              call: "elasticsearch.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-confluence
              type: call
              call: "confluence.process-resource"
              with:
                data: "{{get-elasticsearch.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Compliance Audit Trail Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: elasticsearch
      baseUri: "https://aeropostale-es.com:9200"
      authentication:
        type: bearer
        token: "$secrets.elasticsearch_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: elasticsearch-op
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://aeropostale.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-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

Tracks spending against budgets, forecasts overruns, creates alerts, and notifies finance leaders.

naftiko: "0.5"
info:
  label: "Cost Center Budget Tracking Pipeline"
  description: "Tracks spending against budgets, forecasts overruns, creates alerts, and notifies finance leaders."
  tags:
    - finance
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: cost_center_budget_tracking
          description: "Orchestrate cost center budget tracking 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-powerbi
              type: call
              call: "powerbi.process-resource"
              with:
                data: "{{get-snowflake.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Cost Center Budget Tracking Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://aeropostale.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: 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: powerbi-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

Aggregates customer data from multiple sources, deduplicates, enriches profiles, and syncs to CRM.

naftiko: "0.5"
info:
  label: "Customer 360 Data Sync Pipeline"
  description: "Aggregates customer data from multiple sources, deduplicates, enriches profiles, and syncs to CRM."
  tags:
    - data
    - snowflake
    - salesforce
    - slack
capability:
  exposes:
    - type: mcp
      namespace: data
      port: 8080
      tools:
        - name: customer_360_data_sync_pipeline
          description: "Orchestrate customer 360 data 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:
                data: "{{get-snowflake.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Customer 360 Data Sync Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://aeropostale.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://aeropostale.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

Analyzes customer behavior, predicts churn risk, triggers retention campaigns, and tracks results.

naftiko: "0.5"
info:
  label: "Customer Churn Prediction Pipeline"
  description: "Analyzes customer behavior, predicts churn risk, triggers retention campaigns, and tracks results."
  tags:
    - analytics
    - snowflake
    - hubspot
    - slack
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: customer_churn_prediction_pipeline
          description: "Orchestrate customer churn prediction 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-hubspot
              type: call
              call: "hubspot.process-resource"
              with:
                data: "{{get-snowflake.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Customer Churn Prediction Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://aeropostale.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

When a return request is submitted through Shopify, validates the order in the OMS, creates a return merchandise authorization, updates inventory projections, and sends a return label email to the customer via MailChimp.

naftiko: "0.5"
info:
  label: "Customer Return Processing Pipeline"
  description: "When a return request is submitted through Shopify, validates the order in the OMS, creates a return merchandise authorization, updates inventory projections, and sends a return label email to the customer via MailChimp."
  tags:
    - retail
    - returns
    - shopify
    - mailchimp
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: returns
      port: 8080
      tools:
        - name: process-return
          description: "Given an order ID and return reason, orchestrate the full return workflow across OMS, inventory, and customer communication."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The Shopify order ID."
            - name: reason
              in: body
              type: string
              description: "Reason for the return."
            - name: customer_email
              in: body
              type: string
              description: "Customer email address."
          steps:
            - name: get-order
              type: call
              call: "shopify.get-order"
              with:
                order_id: "{{order_id}}"
            - name: create-rma
              type: call
              call: "oms.create-rma"
              with:
                order_id: "{{order_id}}"
                reason: "{{reason}}"
            - name: update-inventory
              type: call
              call: "wms.adjust-projected-inventory"
              with:
                sku: "{{get-order.line_items[0].sku}}"
                adjustment: 1
            - name: send-label
              type: call
              call: "mailchimp.send-transactional"
              with:
                template: "return_label"
                to_email: "{{customer_email}}"
                merge_vars:
                  rma_number: "{{create-rma.rma_number}}"
                  order_id: "{{order_id}}"
  consumes:
    - type: http
      namespace: shopify
      baseUri: "https://aeropostale.myshopify.com/admin/api/2024-01"
      authentication:
        type: bearer
        token: "$secrets.shopify_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}.json"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: oms
      baseUri: "https://oms.aeropostale.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.oms_token"
      resources:
        - name: returns
          path: "/returns"
          operations:
            - name: create-rma
              method: POST
    - type: http
      namespace: wms
      baseUri: "https://wms.aeropostale.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.wms_token"
      resources:
        - name: inventory-adjust
          path: "/inventory/{{sku}}/adjust"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: adjust-projected-inventory
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://mandrillapp.com/api/1.0"
      authentication:
        type: apikey
        key: "$secrets.mailchimp_transactional_key"
      resources:
        - name: messages
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              method: POST

Creates a new customer segment in MailChimp based on purchase history criteria pulled from the e-commerce platform.

naftiko: "0.5"
info:
  label: "Customer Segment Builder"
  description: "Creates a new customer segment in MailChimp based on purchase history criteria pulled from the e-commerce platform."
  tags:
    - marketing
    - segmentation
    - mailchimp
    - shopify
capability:
  exposes:
    - type: mcp
      namespace: audience-segmentation
      port: 8080
      tools:
        - name: create-purchase-segment
          description: "Build a MailChimp audience segment from Shopify purchase history criteria."
          inputParameters:
            - name: segment_name
              in: body
              type: string
              description: "Name for the new segment."
            - name: product_category
              in: body
              type: string
              description: "Product category to filter by."
            - name: min_orders
              in: body
              type: number
              description: "Minimum number of orders."
          steps:
            - name: get-customers
              type: call
              call: "shopify.search-customers"
              with:
                query: "orders_count:>={{min_orders}} AND tag:{{product_category}}"
            - name: create-segment
              type: call
              call: "mailchimp.create-segment"
              with:
                list_id: "aero_main_list"
                name: "{{segment_name}}"
                emails: "{{get-customers.emails}}"
  consumes:
    - type: http
      namespace: shopify
      baseUri: "https://aeropostale.myshopify.com/admin/api/2024-01"
      authentication:
        type: bearer
        token: "$secrets.shopify_token"
      resources:
        - name: customers
          path: "/customers/search.json"
          operations:
            - name: search-customers
              method: GET
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: segments
          path: "/lists/{{list_id}}/segments"
          inputParameters:
            - name: list_id
              in: path
          operations:
            - name: create-segment
              method: POST

Creates a ServiceNow incident for a customer issue reported through the e-commerce site, attaching order details and notifying the support team.

naftiko: "0.5"
info:
  label: "Customer Support Ticket Creator"
  description: "Creates a ServiceNow incident for a customer issue reported through the e-commerce site, attaching order details and notifying the support team."
  tags:
    - customer-service
    - servicenow
    - shopify
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: customer-support
      port: 8080
      tools:
        - name: create-support-ticket
          description: "Open a ServiceNow incident for a customer complaint with order context and notify the support team."
          inputParameters:
            - name: customer_email
              in: body
              type: string
              description: "Customer email address."
            - name: order_id
              in: body
              type: string
              description: "Related Shopify order ID."
            - name: issue_description
              in: body
              type: string
              description: "Description of the customer issue."
          steps:
            - name: get-order
              type: call
              call: "shopify.get-order"
              with:
                order_id: "{{order_id}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Customer issue: order {{order_id}}"
                description: "{{issue_description}} | Order total: {{get-order.total_price}} | Customer: {{customer_email}}"
                category: "customer_service"
                urgency: "2"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "cs_escalations"
                text: "New support ticket {{create-incident.number}} for order {{order_id}}. Customer: {{customer_email}}."
  consumes:
    - type: http
      namespace: shopify
      baseUri: "https://aeropostale.myshopify.com/admin/api/2024-01"
      authentication:
        type: bearer
        token: "$secrets.shopify_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}.json"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://aeropostale.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"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Runs data quality checks, scores datasets, creates remediation tickets, and publishes scorecards.

naftiko: "0.5"
info:
  label: "Data Quality Monitoring Pipeline"
  description: "Runs data quality checks, scores datasets, creates remediation tickets, and publishes scorecards."
  tags:
    - data-quality
    - snowflake
    - jira
    - grafana
capability:
  exposes:
    - type: mcp
      namespace: data-quality
      port: 8080
      tools:
        - name: data_quality_monitoring_pipeline
          description: "Orchestrate data quality monitoring 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:
                data: "{{get-snowflake.result}}"
            - name: create-grafana
              type: call
              call: "grafana.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Data Quality Monitoring Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://aeropostale.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://aeropostale.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://aeropostale-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 a new denim fit guide is finalized, uploads the content to the Shopify blog, posts a teaser to Instagram, and emails the subscriber list via MailChimp.

naftiko: "0.5"
info:
  label: "Denim Fit Guide Content Publisher"
  description: "When a new denim fit guide is finalized, uploads the content to the Shopify blog, posts a teaser to Instagram, and emails the subscriber list via MailChimp."
  tags:
    - marketing
    - content
    - shopify
    - instagram
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: content-publishing
      port: 8080
      tools:
        - name: publish-fit-guide
          description: "Publish a denim fit guide across the e-commerce blog, social media, and email."
          inputParameters:
            - name: title
              in: body
              type: string
              description: "Fit guide title."
            - name: body_html
              in: body
              type: string
              description: "HTML content of the fit guide."
            - name: hero_image_url
              in: body
              type: string
              description: "URL of the hero image."
          steps:
            - name: publish-blog
              type: call
              call: "shopify.create-blog-post"
              with:
                blog_id: "style_guides"
                title: "{{title}}"
                body_html: "{{body_html}}"
            - name: post-teaser
              type: call
              call: "instagram.create-post"
              with:
                caption: "New fit guide: {{title}}. Find your perfect denim at Aéropostale! Link in bio."
                media_url: "{{hero_image_url}}"
            - name: send-newsletter
              type: call
              call: "mailchimp.create-campaign"
              with:
                name: "Fit Guide: {{title}}"
                template_id: "fit_guide_template"
                segment_id: "denim_lovers"
  consumes:
    - type: http
      namespace: shopify
      baseUri: "https://aeropostale.myshopify.com/admin/api/2024-01"
      authentication:
        type: bearer
        token: "$secrets.shopify_token"
      resources:
        - name: blog-posts
          path: "/blogs/{{blog_id}}/articles.json"
          inputParameters:
            - name: blog_id
              in: path
          operations:
            - name: create-blog-post
              method: POST
    - type: http
      namespace: instagram
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: media
          path: "/me/media"
          operations:
            - name: create-post
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: create-campaign
              method: POST

Tests DR procedures, validates backup integrity, generates readiness reports, and notifies leadership.

naftiko: "0.5"
info:
  label: "Disaster Recovery Readiness Pipeline"
  description: "Tests DR procedures, validates backup integrity, generates readiness reports, and notifies leadership."
  tags:
    - disaster-recovery
    - servicenow
    - confluence
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: disaster-recovery
      port: 8080
      tools:
        - name: disaster_recovery_readiness_pipeline
          description: "Orchestrate disaster recovery readiness pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-servicenow
              type: call
              call: "servicenow.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-confluence
              type: call
              call: "confluence.process-resource"
              with:
                data: "{{get-servicenow.result}}"
            - name: create-jira
              type: call
              call: "jira.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Disaster Recovery Readiness Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://aeropostale.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: confluence
      baseUri: "https://aeropostale.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-op
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://aeropostale.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

Aggregates weekly sales from the POS for all stores in a district, computes comparisons, and emails the district manager a summary report via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "District Sales Comparison Report"
  description: "Aggregates weekly sales from the POS for all stores in a district, computes comparisons, and emails the district manager a summary report via Microsoft Outlook."
  tags:
    - retail
    - analytics
    - pos
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: district-reporting
      port: 8080
      tools:
        - name: generate-district-report
          description: "Build a weekly district sales comparison and email it to the district manager."
          inputParameters:
            - name: district_id
              in: body
              type: string
              description: "District identifier."
            - name: week_ending
              in: body
              type: string
              description: "Week ending date in YYYY-MM-DD format."
            - name: manager_email
              in: body
              type: string
              description: "District manager email."
          steps:
            - name: get-district-sales
              type: call
              call: "pos.get-district-weekly-sales"
              with:
                district_id: "{{district_id}}"
                week_ending: "{{week_ending}}"
            - name: send-report
              type: call
              call: "outlook.send-email"
              with:
                to: "{{manager_email}}"
                subject: "Weekly Sales Report - District {{district_id}} ending {{week_ending}}"
                body: "District {{district_id}} total revenue: ${{get-district-sales.total_revenue}}. Top store: {{get-district-sales.top_store}}. Comp vs last year: {{get-district-sales.comp_pct}}%."
  consumes:
    - type: http
      namespace: pos
      baseUri: "https://pos.aeropostale.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pos_token"
      resources:
        - name: district-sales
          path: "/districts/{{district_id}}/sales/weekly"
          inputParameters:
            - name: district_id
              in: path
          operations:
            - name: get-district-weekly-sales
              method: GET
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: send-mail
          path: "/me/sendMail"
          operations:
            - name: send-email
              method: POST

Fetches conversion funnel metrics from Google Optimize including A/B test variant performance and checkout completion rates.

naftiko: "0.5"
info:
  label: "E-Commerce Conversion Rate Tracker"
  description: "Fetches conversion funnel metrics from Google Optimize including A/B test variant performance and checkout completion rates."
  tags:
    - analytics
    - e-commerce
    - google-optimize
    - conversion
capability:
  exposes:
    - type: mcp
      namespace: conversion-analytics
      port: 8080
      tools:
        - name: get-conversion-metrics
          description: "Retrieve A/B test variant performance and checkout funnel conversion rates."
          inputParameters:
            - name: experiment_id
              in: body
              type: string
              description: "Google Optimize experiment ID."
          call: "goptimize.get-experiment-results"
          with:
            experiment_id: "{{experiment_id}}"
          outputParameters:
            - name: variants
              type: array
              mapping: "$.experiment.variants"
            - name: winning_variant
              type: string
              mapping: "$.experiment.leading_variant"
            - name: conversion_rate
              type: number
              mapping: "$.experiment.overall_conversion_rate"
  consumes:
    - type: http
      namespace: goptimize
      baseUri: "https://www.googleapis.com/analytics/v3/management"
      authentication:
        type: bearer
        token: "$secrets.google_optimize_token"
      resources:
        - name: experiments
          path: "/accounts/{{account_id}}/webproperties/{{property_id}}/experiments/{{experiment_id}}"
          inputParameters:
            - name: experiment_id
              in: path
          operations:
            - name: get-experiment-results
              method: GET

Provisions new employee accounts, assigns training, creates IT tickets, and notifies managers.

naftiko: "0.5"
info:
  label: "Employee Onboarding Automation Pipeline"
  description: "Provisions new employee accounts, assigns training, creates IT tickets, and notifies managers."
  tags:
    - hr
    - workday
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: employee_onboarding_automation
          description: "Orchestrate employee onboarding automation 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-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                data: "{{get-workday.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Employee Onboarding Automation Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/aeropostale"
      authentication:
        type: bearer
        token: "$secrets.workday_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: workday-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://aeropostale.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 a new store associate is hired, creates a ServiceNow onboarding ticket, provisions a POS account, adds the associate to the store Microsoft Teams channel, and sends a welcome email via MailChimp.

naftiko: "0.5"
info:
  label: "Employee Onboarding Pipeline"
  description: "When a new store associate is hired, creates a ServiceNow onboarding ticket, provisions a POS account, adds the associate to the store Microsoft Teams channel, and sends a welcome email via MailChimp."
  tags:
    - hr
    - onboarding
    - servicenow
    - pos
    - microsoft-teams
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: onboard-associate
          description: "Run the full onboarding workflow for a new Aéropostale store associate."
          inputParameters:
            - name: employee_name
              in: body
              type: string
              description: "New employee full name."
            - name: employee_email
              in: body
              type: string
              description: "New employee email address."
            - name: store_id
              in: body
              type: string
              description: "Store location where the associate will work."
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
          steps:
            - name: create-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Onboarding: {{employee_name}} at store {{store_id}}"
                category: "hr_onboarding"
                description: "New associate {{employee_name}} starting {{start_date}} at store {{store_id}}."
            - name: provision-pos
              type: call
              call: "pos.create-user"
              with:
                name: "{{employee_name}}"
                email: "{{employee_email}}"
                store_id: "{{store_id}}"
                role: "associate"
            - name: add-to-teams
              type: call
              call: "msteams.add-member"
              with:
                team_id: "store_{{store_id}}_team"
                user_email: "{{employee_email}}"
            - name: send-welcome
              type: call
              call: "mailchimp.send-transactional"
              with:
                template: "associate_welcome"
                to_email: "{{employee_email}}"
                merge_vars:
                  name: "{{employee_name}}"
                  start_date: "{{start_date}}"
                  store_id: "{{store_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://aeropostale.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: pos
      baseUri: "https://pos.aeropostale.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pos_token"
      resources:
        - name: users
          path: "/users"
          operations:
            - name: create-user
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: members
          path: "/teams/{{team_id}}/members"
          inputParameters:
            - name: team_id
              in: path
          operations:
            - name: add-member
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://mandrillapp.com/api/1.0"
      authentication:
        type: apikey
        key: "$secrets.mailchimp_transactional_key"
      resources:
        - name: messages
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              method: POST

Retrieves performance metrics for a Facebook ad campaign including spend, impressions, clicks, and conversions.

naftiko: "0.5"
info:
  label: "Facebook Ad Performance Report"
  description: "Retrieves performance metrics for a Facebook ad campaign including spend, impressions, clicks, and conversions."
  tags:
    - marketing
    - advertising
    - facebook
capability:
  exposes:
    - type: mcp
      namespace: ad-analytics
      port: 8080
      tools:
        - name: get-fb-ad-performance
          description: "Fetch Facebook ad campaign performance metrics."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "Facebook campaign ID."
            - name: date_range
              in: body
              type: string
              description: "Date range for the report."
          call: "facebook.get-campaign-insights"
          with:
            campaign_id: "{{campaign_id}}"
            date_range: "{{date_range}}"
          outputParameters:
            - name: spend
              type: number
              mapping: "$.data[0].spend"
            - name: impressions
              type: number
              mapping: "$.data[0].impressions"
            - name: clicks
              type: number
              mapping: "$.data[0].clicks"
            - name: conversions
              type: number
              mapping: "$.data[0].actions[0].value"
  consumes:
    - type: http
      namespace: facebook
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.facebook_ads_token"
      resources:
        - name: insights
          path: "/{{campaign_id}}/insights"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: get-campaign-insights
              method: GET

When a flash sale is triggered, reserves inventory for the sale SKUs in the warehouse system, applies temporary pricing in Shopify, and sends an urgent notification to the e-commerce team.

naftiko: "0.5"
info:
  label: "Flash Sale Inventory Reservation"
  description: "When a flash sale is triggered, reserves inventory for the sale SKUs in the warehouse system, applies temporary pricing in Shopify, and sends an urgent notification to the e-commerce team."
  tags:
    - retail
    - flash-sale
    - shopify
    - wms
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: flash-sales
      port: 8080
      tools:
        - name: activate-flash-sale
          description: "Reserve inventory, apply sale pricing, and alert the team for a flash sale event."
          inputParameters:
            - name: sale_id
              in: body
              type: string
              description: "Flash sale event identifier."
            - name: skus
              in: body
              type: array
              description: "List of SKUs included in the flash sale."
            - name: discount_percent
              in: body
              type: number
              description: "Discount percentage to apply."
          steps:
            - name: reserve-inventory
              type: call
              call: "wms.reserve-inventory"
              with:
                sale_id: "{{sale_id}}"
                skus: "{{skus}}"
            - name: apply-pricing
              type: call
              call: "shopify.apply-sale-pricing"
              with:
                skus: "{{skus}}"
                discount_percent: "{{discount_percent}}"
            - name: notify-ecom
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "ecommerce_ops"
                text: "Flash sale {{sale_id}} is LIVE. {{reserve-inventory.reserved_count}} SKUs reserved at {{discount_percent}}% off."
  consumes:
    - type: http
      namespace: wms
      baseUri: "https://wms.aeropostale.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.wms_token"
      resources:
        - name: reservations
          path: "/reservations"
          operations:
            - name: reserve-inventory
              method: POST
    - type: http
      namespace: shopify
      baseUri: "https://aeropostale.myshopify.com/admin/api/2024-01"
      authentication:
        type: bearer
        token: "$secrets.shopify_token"
      resources:
        - name: price-rules
          path: "/price_rules.json"
          operations:
            - name: apply-sale-pricing
              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"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Queries the payment processing system for the current balance and expiration date of a given gift card number.

naftiko: "0.5"
info:
  label: "Gift Card Balance Checker"
  description: "Queries the payment processing system for the current balance and expiration date of a given gift card number."
  tags:
    - retail
    - payments
    - gift-cards
capability:
  exposes:
    - type: mcp
      namespace: gift-cards
      port: 8080
      tools:
        - name: check-gift-card-balance
          description: "Look up the remaining balance and expiration for an Aéropostale gift card."
          inputParameters:
            - name: card_number
              in: body
              type: string
              description: "Gift card number."
          call: "payments.get-gift-card"
          with:
            card_number: "{{card_number}}"
          outputParameters:
            - name: balance
              type: number
              mapping: "$.gift_card.balance"
            - name: currency
              type: string
              mapping: "$.gift_card.currency"
            - name: expires_at
              type: string
              mapping: "$.gift_card.expires_at"
  consumes:
    - type: http
      namespace: payments
      baseUri: "https://payments.aeropostale.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.payments_token"
      resources:
        - name: gift-cards
          path: "/gift-cards/{{card_number}}"
          inputParameters:
            - name: card_number
              in: path
          operations:
            - name: get-gift-card
              method: GET

Pulls website traffic metrics from Google Analytics for a specified date range and returns page views, session duration, and bounce rate for the Aéropostale e-commerce site.

naftiko: "0.5"
info:
  label: "Google Analytics Traffic Report"
  description: "Pulls website traffic metrics from Google Analytics for a specified date range and returns page views, session duration, and bounce rate for the Aéropostale e-commerce site."
  tags:
    - analytics
    - e-commerce
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: web-analytics
      port: 8080
      tools:
        - name: get-traffic-report
          description: "Retrieve key website traffic metrics for the Aéropostale online store over a given date range."
          inputParameters:
            - 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: "ga.get-report"
          with:
            view_id: "aero_ecommerce"
            start_date: "{{start_date}}"
            end_date: "{{end_date}}"
            metrics: "ga:pageviews,ga:avgSessionDuration,ga:bounceRate"
          outputParameters:
            - name: page_views
              type: number
              mapping: "$.reports[0].data.totals[0].values[0]"
            - name: avg_session_duration
              type: string
              mapping: "$.reports[0].data.totals[0].values[1]"
            - name: bounce_rate
              type: string
              mapping: "$.reports[0].data.totals[0].values[2]"
  consumes:
    - type: http
      namespace: ga
      baseUri: "https://analyticsreporting.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/reports:batchGet"
          operations:
            - name: get-report
              method: POST

Returns the nearest Aéropostale store locations to a given ZIP code using the Google Maps Places API.

naftiko: "0.5"
info:
  label: "Google Maps Store Locator"
  description: "Returns the nearest Aéropostale store locations to a given ZIP code using the Google Maps Places API."
  tags:
    - retail
    - google-maps
    - store-locator
capability:
  exposes:
    - type: mcp
      namespace: store-locator
      port: 8080
      tools:
        - name: find-nearest-stores
          description: "Find the closest Aéropostale stores to a given ZIP code."
          inputParameters:
            - name: zip_code
              in: body
              type: string
              description: "Customer ZIP code."
            - name: radius_miles
              in: body
              type: number
              description: "Search radius in miles."
          call: "gmaps.search-places"
          with:
            query: "Aeropostale"
            location: "{{zip_code}}"
            radius: "{{radius_miles}}"
          outputParameters:
            - name: stores
              type: array
              mapping: "$.results"
            - name: count
              type: number
              mapping: "$.results.length"
  consumes:
    - type: http
      namespace: gmaps
      baseUri: "https://maps.googleapis.com/maps/api"
      authentication:
        type: apikey
        key: "$secrets.google_maps_key"
      resources:
        - name: places
          path: "/place/textsearch/json"
          operations:
            - name: search-places
              method: GET

Appends a row of data to a specified Google Sheets spreadsheet. Used as a reusable logging component across workflows.

naftiko: "0.5"
info:
  label: "Google Sheets Row Appender"
  description: "Appends a row of data to a specified Google Sheets spreadsheet. Used as a reusable logging component across workflows."
  tags:
    - productivity
    - google-sheets
    - logging
capability:
  exposes:
    - type: mcp
      namespace: sheets-logging
      port: 8080
      tools:
        - name: append-sheet-row
          description: "Append a row to a Google Sheets spreadsheet."
          inputParameters:
            - name: spreadsheet_id
              in: body
              type: string
              description: "Google Sheets spreadsheet ID."
            - name: range
              in: body
              type: string
              description: "Sheet range such as Sheet1!A:D."
            - name: values
              in: body
              type: array
              description: "Array of values for the new row."
          call: "gsheets.append-row"
          with:
            spreadsheet_id: "{{spreadsheet_id}}"
            range: "{{range}}"
            values: "{{values}}"
  consumes:
    - 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

Compares deployed state against desired config, identifies drift, creates remediation tickets, and alerts ops.

naftiko: "0.5"
info:
  label: "Infrastructure Drift Detection Pipeline"
  description: "Compares deployed state against desired config, identifies drift, creates remediation tickets, and alerts ops."
  tags:
    - devops
    - github
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: devops
      port: 8080
      tools:
        - name: infrastructure_drift_detection
          description: "Orchestrate infrastructure drift detection pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-github
              type: call
              call: "github.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-jira
              type: call
              call: "jira.process-resource"
              with:
                data: "{{get-github.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Infrastructure Drift Detection Pipeline step 3 complete."

  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-op
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://aeropostale.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 an influencer posts tagged content on Instagram, captures engagement metrics, logs them to Google Sheets, and sends a performance summary to the marketing team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Instagram Influencer Campaign Tracker"
  description: "When an influencer posts tagged content on Instagram, captures engagement metrics, logs them to Google Sheets, and sends a performance summary to the marketing team in Microsoft Teams."
  tags:
    - marketing
    - social-media
    - instagram
    - google-sheets
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: influencer-tracking
      port: 8080
      tools:
        - name: track-influencer-post
          description: "Given an Instagram media ID and influencer handle, capture engagement data and route to marketing dashboards."
          inputParameters:
            - name: media_id
              in: body
              type: string
              description: "Instagram media ID."
            - name: influencer_handle
              in: body
              type: string
              description: "The influencer Instagram handle."
            - name: campaign_name
              in: body
              type: string
              description: "Associated campaign name."
          steps:
            - name: get-metrics
              type: call
              call: "instagram.get-media-insights"
              with:
                media_id: "{{media_id}}"
            - name: log-to-sheet
              type: call
              call: "gsheets.append-row"
              with:
                spreadsheet_id: "aero_influencer_tracker"
                range: "Posts!A:F"
                values:
                  - "{{influencer_handle}}"
                  - "{{media_id}}"
                  - "{{campaign_name}}"
                  - "{{get-metrics.likes}}"
                  - "{{get-metrics.comments}}"
                  - "{{get-metrics.reach}}"
            - name: notify-marketing
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "marketing_social"
                text: "Influencer {{influencer_handle}} post for {{campaign_name}}: {{get-metrics.likes}} likes, {{get-metrics.comments}} comments, {{get-metrics.reach}} reach."
  consumes:
    - type: http
      namespace: instagram
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: media-insights
          path: "/{{media_id}}/insights"
          inputParameters:
            - name: media_id
              in: path
          operations:
            - name: get-media-insights
              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}}:append"
          inputParameters:
            - name: spreadsheet_id
              in: path
            - name: range
              in: path
          operations:
            - name: append-row
              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"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Tracks asset lifecycle stages, schedules replacements, manages disposal, and updates CMDB.

naftiko: "0.5"
info:
  label: "IT Asset Lifecycle Pipeline"
  description: "Tracks asset lifecycle stages, schedules replacements, manages disposal, and updates CMDB."
  tags:
    - operations
    - servicenow
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: operations
      port: 8080
      tools:
        - name: it_asset_lifecycle_pipeline
          description: "Orchestrate it asset lifecycle pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-servicenow
              type: call
              call: "servicenow.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                data: "{{get-servicenow.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "IT Asset Lifecycle Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://aeropostale.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: snowflake
      baseUri: "https://aeropostale.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 the current status, assignee, and due date for a Jira issue by key.

naftiko: "0.5"
info:
  label: "Jira Task Status Lookup"
  description: "Retrieves the current status, assignee, and due date for a Jira issue by key."
  tags:
    - project-management
    - jira
capability:
  exposes:
    - type: mcp
      namespace: project-tracking
      port: 8080
      tools:
        - name: get-jira-issue
          description: "Look up a Jira issue by key and return its status, assignee, and due date."
          inputParameters:
            - name: issue_key
              in: body
              type: string
              description: "Jira issue key such as VM-123."
          call: "jira.get-issue"
          with:
            issue_key: "{{issue_key}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.fields.status.name"
            - name: assignee
              type: string
              mapping: "$.fields.assignee.displayName"
            - name: due_date
              type: string
              mapping: "$.fields.duedate"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://aeropostale.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue/{{issue_key}}"
          inputParameters:
            - name: issue_key
              in: path
          operations:
            - name: get-issue
              method: GET

Identifies stale articles, assigns review tasks, tracks updates, and publishes freshness reports.

naftiko: "0.5"
info:
  label: "Knowledge Base Freshness Pipeline"
  description: "Identifies stale articles, assigns review tasks, tracks updates, and publishes freshness reports."
  tags:
    - knowledge
    - confluence
    - jira
    - slack
capability:
  exposes:
    - type: mcp
      namespace: knowledge
      port: 8080
      tools:
        - name: knowledge_base_freshness_pipeline
          description: "Orchestrate knowledge base freshness pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-confluence
              type: call
              call: "confluence.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-jira
              type: call
              call: "jira.process-resource"
              with:
                data: "{{get-confluence.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Knowledge Base Freshness Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://aeropostale.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-op
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://aeropostale.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

Posts a new store associate or corporate job opening to LinkedIn and logs the posting details in Google Sheets for the recruiting team.

naftiko: "0.5"
info:
  label: "LinkedIn Job Posting Publisher"
  description: "Posts a new store associate or corporate job opening to LinkedIn and logs the posting details in Google Sheets for the recruiting team."
  tags:
    - hr
    - recruiting
    - linkedin
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: recruiting
      port: 8080
      tools:
        - name: post-job-to-linkedin
          description: "Publish a job opening on LinkedIn and track the posting in Google Sheets."
          inputParameters:
            - name: job_title
              in: body
              type: string
              description: "Job title."
            - name: job_description
              in: body
              type: string
              description: "Job description text."
            - name: location
              in: body
              type: string
              description: "Job location."
          steps:
            - name: create-posting
              type: call
              call: "linkedin.create-job-posting"
              with:
                title: "{{job_title}}"
                description: "{{job_description}}"
                location: "{{location}}"
                company_id: "aeropostale"
            - name: log-posting
              type: call
              call: "gsheets.append-row"
              with:
                spreadsheet_id: "aero_recruiting_tracker"
                range: "Postings!A:D"
                values:
                  - "{{job_title}}"
                  - "{{location}}"
                  - "{{create-posting.posting_id}}"
                  - "active"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: job-postings
          path: "/simpleJobPostings"
          operations:
            - name: create-job-posting
              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

When the POS system flags a suspicious transaction, creates a ServiceNow incident, logs details in Google Sheets, and sends an urgent alert to the loss prevention Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Loss Prevention Alert Handler"
  description: "When the POS system flags a suspicious transaction, creates a ServiceNow incident, logs details in Google Sheets, and sends an urgent alert to the loss prevention Microsoft Teams channel."
  tags:
    - retail
    - loss-prevention
    - pos
    - servicenow
    - google-sheets
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: loss-prevention
      port: 8080
      tools:
        - name: handle-lp-alert
          description: "Process a loss prevention alert from POS through incident creation, logging, and team notification."
          inputParameters:
            - name: transaction_id
              in: body
              type: string
              description: "Flagged POS transaction ID."
            - name: store_id
              in: body
              type: string
              description: "Store where the transaction occurred."
            - name: alert_type
              in: body
              type: string
              description: "Type of alert such as void_abuse or sweethearting."
          steps:
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "LP Alert: {{alert_type}} at store {{store_id}}"
                category: "loss_prevention"
                urgency: "1"
                description: "Transaction {{transaction_id}} flagged for {{alert_type}} at store {{store_id}}."
            - name: log-alert
              type: call
              call: "gsheets.append-row"
              with:
                spreadsheet_id: "aero_lp_log"
                range: "Alerts!A:D"
                values:
                  - "{{transaction_id}}"
                  - "{{store_id}}"
                  - "{{alert_type}}"
                  - "{{create-incident.number}}"
            - name: alert-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "loss_prevention"
                text: "URGENT LP Alert: {{alert_type}} at store {{store_id}}, transaction {{transaction_id}}. Incident: {{create-incident.number}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://aeropostale.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
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves the current loyalty points balance and tier status for a given customer from the CRM system.

naftiko: "0.5"
info:
  label: "Loyalty Program Points Balance"
  description: "Retrieves the current loyalty points balance and tier status for a given customer from the CRM system."
  tags:
    - retail
    - loyalty
    - crm
    - customer-service
capability:
  exposes:
    - type: mcp
      namespace: loyalty
      port: 8080
      tools:
        - name: get-points-balance
          description: "Look up a customer loyalty points balance and tier by customer ID or email."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "Customer ID or email address."
          call: "crm.get-loyalty-profile"
          with:
            customer_id: "{{customer_id}}"
          outputParameters:
            - name: points_balance
              type: number
              mapping: "$.loyalty.points_balance"
            - name: tier
              type: string
              mapping: "$.loyalty.tier_name"
            - name: points_to_next_tier
              type: number
              mapping: "$.loyalty.points_to_next_tier"
  consumes:
    - type: http
      namespace: crm
      baseUri: "https://crm.aeropostale.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.crm_token"
      resources:
        - name: loyalty
          path: "/customers/{{customer_id}}/loyalty"
          inputParameters:
            - name: customer_id
              in: path
          operations:
            - name: get-loyalty-profile
              method: GET

Returns the current subscriber count and recent growth rate for a specified MailChimp audience list.

naftiko: "0.5"
info:
  label: "MailChimp Subscriber Count Lookup"
  description: "Returns the current subscriber count and recent growth rate for a specified MailChimp audience list."
  tags:
    - marketing
    - email
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: email-audience
      port: 8080
      tools:
        - name: get-subscriber-count
          description: "Retrieve the subscriber count and growth stats for a MailChimp audience."
          inputParameters:
            - name: list_id
              in: body
              type: string
              description: "The MailChimp list/audience ID."
          call: "mailchimp.get-list-stats"
          with:
            list_id: "{{list_id}}"
          outputParameters:
            - name: member_count
              type: number
              mapping: "$.stats.member_count"
            - name: growth_rate
              type: number
              mapping: "$.stats.growth_rate_monthly"
  consumes:
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: lists
          path: "/lists/{{list_id}}"
          inputParameters:
            - name: list_id
              in: path
          operations:
            - name: get-list-stats
              method: GET

Correlates in-store POS transaction counts with Google Analytics location traffic data to measure the store conversion rate for a given mall location.

naftiko: "0.5"
info:
  label: "Mall Traffic Correlation Analyzer"
  description: "Correlates in-store POS transaction counts with Google Analytics location traffic data to measure the store conversion rate for a given mall location."
  tags:
    - retail
    - analytics
    - pos
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: traffic-analytics
      port: 8080
      tools:
        - name: correlate-mall-traffic
          description: "Compare POS transactions with foot traffic data to compute store conversion rate."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "Store location ID."
            - name: date
              in: body
              type: string
              description: "Analysis date."
          steps:
            - name: get-transactions
              type: call
              call: "pos.get-transaction-count"
              with:
                store_id: "{{store_id}}"
                date: "{{date}}"
            - name: get-foot-traffic
              type: call
              call: "ga.get-location-traffic"
              with:
                store_id: "{{store_id}}"
                date: "{{date}}"
  consumes:
    - type: http
      namespace: pos
      baseUri: "https://pos.aeropostale.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pos_token"
      resources:
        - name: transactions
          path: "/stores/{{store_id}}/transactions/count"
          inputParameters:
            - name: store_id
              in: path
          operations:
            - name: get-transaction-count
              method: GET
    - type: http
      namespace: ga
      baseUri: "https://analyticsreporting.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/reports:batchGet"
          operations:
            - name: get-location-traffic
              method: POST

Sends an email via Microsoft Outlook/Graph API. Reusable component for various notification workflows.

naftiko: "0.5"
info:
  label: "Microsoft Outlook Email Sender"
  description: "Sends an email via Microsoft Outlook/Graph API. Reusable component for various notification workflows."
  tags:
    - collaboration
    - microsoft-outlook
    - email
capability:
  exposes:
    - type: mcp
      namespace: email
      port: 8080
      tools:
        - name: send-email
          description: "Send an email via Microsoft Outlook."
          inputParameters:
            - name: to
              in: body
              type: string
              description: "Recipient email address."
            - name: subject
              in: body
              type: string
              description: "Email subject line."
            - name: body
              in: body
              type: string
              description: "Email body text."
          call: "outlook.send-email"
          with:
            to: "{{to}}"
            subject: "{{subject}}"
            body: "{{body}}"
  consumes:
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: send-mail
          path: "/me/sendMail"
          operations:
            - name: send-email
              method: POST

Sends a message to a specified Microsoft Teams channel. Used as a building block for notifications across multiple workflows.

naftiko: "0.5"
info:
  label: "Microsoft Teams Channel Message Sender"
  description: "Sends a message to a specified Microsoft Teams channel. Used as a building block for notifications across multiple workflows."
  tags:
    - collaboration
    - microsoft-teams
    - notifications
capability:
  exposes:
    - type: mcp
      namespace: teams-messaging
      port: 8080
      tools:
        - name: send-channel-message
          description: "Post a message to a Microsoft Teams channel."
          inputParameters:
            - name: channel_id
              in: body
              type: string
              description: "Teams channel identifier."
            - name: message_text
              in: body
              type: string
              description: "Message content to post."
          call: "msteams.send-message"
          with:
            channel_id: "{{channel_id}}"
            text: "{{message_text}}"
  consumes:
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a new store location is approved, creates a project in Microsoft Planner, provisions the store in the POS system, sets up a dedicated Microsoft Teams channel, and opens a Jira epic for the build-out.

naftiko: "0.5"
info:
  label: "New Store Opening Coordinator"
  description: "When a new store location is approved, creates a project in Microsoft Planner, provisions the store in the POS system, sets up a dedicated Microsoft Teams channel, and opens a Jira epic for the build-out."
  tags:
    - retail
    - operations
    - microsoft-planner
    - microsoft-teams
    - jira
    - pos
capability:
  exposes:
    - type: mcp
      namespace: store-opening
      port: 8080
      tools:
        - name: initiate-store-opening
          description: "Orchestrate all setup tasks for a new Aéropostale store location."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "New store location ID."
            - name: store_name
              in: body
              type: string
              description: "Store name and location."
            - name: target_open_date
              in: body
              type: string
              description: "Planned opening date."
          steps:
            - name: create-plan
              type: call
              call: "planner.create-plan"
              with:
                title: "Store Opening: {{store_name}}"
                group_id: "store_openings_group"
            - name: provision-pos
              type: call
              call: "pos.create-store"
              with:
                store_id: "{{store_id}}"
                store_name: "{{store_name}}"
            - name: create-channel
              type: call
              call: "msteams.create-channel"
              with:
                team_id: "store_ops_team"
                display_name: "{{store_name}} Opening"
                description: "Coordination channel for {{store_name}} opening on {{target_open_date}}."
            - name: create-epic
              type: call
              call: "jira.create-issue"
              with:
                project: "STORES"
                issue_type: "Epic"
                summary: "New store build-out: {{store_name}}"
                due_date: "{{target_open_date}}"
  consumes:
    - type: http
      namespace: planner
      baseUri: "https://graph.microsoft.com/v1.0/planner"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: plans
          path: "/plans"
          operations:
            - name: create-plan
              method: POST
    - type: http
      namespace: pos
      baseUri: "https://pos.aeropostale.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pos_token"
      resources:
        - name: stores
          path: "/stores"
          operations:
            - name: create-store
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channels
          path: "/teams/{{team_id}}/channels"
          inputParameters:
            - name: team_id
              in: path
          operations:
            - name: create-channel
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://aeropostale.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Synchronizes inventory across channels, resolves discrepancies, and updates all systems.

naftiko: "0.5"
info:
  label: "Omnichannel Inventory Sync Pipeline"
  description: "Synchronizes inventory across channels, resolves discrepancies, and updates all systems."
  tags:
    - inventory
    - 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-salesforce
              type: call
              call: "salesforce.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                data: "{{get-salesforce.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Omnichannel Inventory Sync Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://aeropostale.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://aeropostale.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 a new e-commerce order is placed, evaluates inventory across the distribution center and nearby stores, selects the optimal fulfillment location, and routes the order to either ship-from-store or DC fulfillment via the OMS.

naftiko: "0.5"
info:
  label: "Omnichannel Order Fulfillment Router"
  description: "When a new e-commerce order is placed, evaluates inventory across the distribution center and nearby stores, selects the optimal fulfillment location, and routes the order to either ship-from-store or DC fulfillment via the OMS."
  tags:
    - retail
    - fulfillment
    - omnichannel
    - oms
    - wms
capability:
  exposes:
    - type: mcp
      namespace: fulfillment-routing
      port: 8080
      tools:
        - name: route-order
          description: "Determine the best fulfillment source for an order and route it accordingly."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "Shopify order ID."
            - name: customer_zip
              in: body
              type: string
              description: "Customer shipping ZIP code."
          steps:
            - name: get-order
              type: call
              call: "shopify.get-order"
              with:
                order_id: "{{order_id}}"
            - name: check-dc-stock
              type: call
              call: "wms.check-availability"
              with:
                skus: "{{get-order.line_item_skus}}"
                location: "main_dc"
            - name: check-store-stock
              type: call
              call: "wms.check-nearest-store"
              with:
                skus: "{{get-order.line_item_skus}}"
                zip: "{{customer_zip}}"
            - name: assign-fulfillment
              type: call
              call: "oms.assign-fulfillment"
              with:
                order_id: "{{order_id}}"
                dc_available: "{{check-dc-stock.available}}"
                store_available: "{{check-store-stock.available}}"
                store_id: "{{check-store-stock.store_id}}"
  consumes:
    - type: http
      namespace: shopify
      baseUri: "https://aeropostale.myshopify.com/admin/api/2024-01"
      authentication:
        type: bearer
        token: "$secrets.shopify_token"
      resources:
        - name: orders
          path: "/orders/{{order_id}}.json"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: wms
      baseUri: "https://wms.aeropostale.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.wms_token"
      resources:
        - name: availability
          path: "/inventory/availability"
          operations:
            - name: check-availability
              method: POST
            - name: check-nearest-store
              method: POST
    - type: http
      namespace: oms
      baseUri: "https://oms.aeropostale.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.oms_token"
      resources:
        - name: fulfillment
          path: "/orders/{{order_id}}/fulfillment"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: assign-fulfillment
              method: POST

Initiates review cycles, collects feedback, aggregates scores, and distributes to managers.

naftiko: "0.5"
info:
  label: "Performance Review Cycle Pipeline"
  description: "Initiates review cycles, collects feedback, aggregates scores, and distributes to managers."
  tags:
    - hr
    - workday
    - confluence
    - slack
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: performance_review_cycle_pipeline
          description: "Orchestrate performance review cycle 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-confluence
              type: call
              call: "confluence.process-resource"
              with:
                data: "{{get-workday.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Performance Review Cycle Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/aeropostale"
      authentication:
        type: bearer
        token: "$secrets.workday_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: workday-op
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://aeropostale.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-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

At end of business day, pulls transaction summaries from each POS register, reconciles totals against expected values, and flags discrepancies in a ServiceNow incident if the variance exceeds threshold.

naftiko: "0.5"
info:
  label: "POS Daily Reconciliation Workflow"
  description: "At end of business day, pulls transaction summaries from each POS register, reconciles totals against expected values, and flags discrepancies in a ServiceNow incident if the variance exceeds threshold."
  tags:
    - retail
    - finance
    - pos
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: pos-reconciliation
      port: 8080
      tools:
        - name: reconcile-daily-pos
          description: "Reconcile POS register totals and flag discrepancies."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "Store identifier."
            - name: date
              in: body
              type: string
              description: "Business date."
            - name: variance_threshold
              in: body
              type: number
              description: "Dollar amount threshold for flagging."
          steps:
            - name: get-register-totals
              type: call
              call: "pos.get-register-summary"
              with:
                store_id: "{{store_id}}"
                date: "{{date}}"
            - name: flag-discrepancy
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "POS variance at store {{store_id}} on {{date}}"
                category: "finance"
                description: "Register variance of ${{get-register-totals.total_variance}} detected at store {{store_id}} on {{date}}. Threshold: ${{variance_threshold}}."
  consumes:
    - type: http
      namespace: pos
      baseUri: "https://pos.aeropostale.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pos_token"
      resources:
        - name: register-summary
          path: "/stores/{{store_id}}/registers/summary/{{date}}"
          inputParameters:
            - name: store_id
              in: path
            - name: date
              in: path
          operations:
            - name: get-register-summary
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://aeropostale.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

When a price markdown is approved, updates the product price in Shopify, refreshes the cached price in the POS system, and posts a markdown notification to the store operations Teams channel.

naftiko: "0.5"
info:
  label: "Product Price Update Propagator"
  description: "When a price markdown is approved, updates the product price in Shopify, refreshes the cached price in the POS system, and posts a markdown notification to the store operations Teams channel."
  tags:
    - retail
    - pricing
    - shopify
    - pos
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: pricing
      port: 8080
      tools:
        - name: propagate-markdown
          description: "Apply a price markdown across Shopify, POS, and notify store operations."
          inputParameters:
            - name: product_id
              in: body
              type: string
              description: "Shopify product ID."
            - name: new_price
              in: body
              type: number
              description: "The new marked-down price."
            - name: markdown_reason
              in: body
              type: string
              description: "Reason for the markdown such as clearance or seasonal."
          steps:
            - name: update-shopify
              type: call
              call: "shopify.update-product-price"
              with:
                product_id: "{{product_id}}"
                price: "{{new_price}}"
            - name: update-pos
              type: call
              call: "pos.update-price"
              with:
                product_id: "{{product_id}}"
                price: "{{new_price}}"
            - name: notify-ops
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "store_ops"
                text: "Markdown applied: Product {{product_id}} now ${{new_price}} ({{markdown_reason}}). Updated in Shopify and POS."
  consumes:
    - type: http
      namespace: shopify
      baseUri: "https://aeropostale.myshopify.com/admin/api/2024-01"
      authentication:
        type: bearer
        token: "$secrets.shopify_token"
      resources:
        - name: products
          path: "/products/{{product_id}}.json"
          inputParameters:
            - name: product_id
              in: path
          operations:
            - name: update-product-price
              method: PUT
    - type: http
      namespace: pos
      baseUri: "https://pos.aeropostale.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pos_token"
      resources:
        - name: products
          path: "/products/{{product_id}}/price"
          inputParameters:
            - name: product_id
              in: path
          operations:
            - name: update-price
              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"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Collects customer reviews from the Shopify storefront, computes average ratings, and posts a weekly review summary to the product team Microsoft Teams channel for merchandise optimization.

naftiko: "0.5"
info:
  label: "Product Review Aggregation Pipeline"
  description: "Collects customer reviews from the Shopify storefront, computes average ratings, and posts a weekly review summary to the product team Microsoft Teams channel for merchandise optimization."
  tags:
    - retail
    - customer-feedback
    - shopify
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: review-analytics
      port: 8080
      tools:
        - name: aggregate-reviews
          description: "Pull recent product reviews, compute ratings, and notify the product team."
          inputParameters:
            - name: product_id
              in: body
              type: string
              description: "Shopify product ID."
            - name: since_date
              in: body
              type: string
              description: "Start date for review collection."
          steps:
            - name: get-reviews
              type: call
              call: "shopify.get-product-reviews"
              with:
                product_id: "{{product_id}}"
                since: "{{since_date}}"
            - name: post-summary
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "product_team"
                text: "Product {{product_id}} reviews since {{since_date}}: {{get-reviews.count}} reviews, avg rating {{get-reviews.avg_rating}}/5. Top complaint: {{get-reviews.top_negative_theme}}."
  consumes:
    - type: http
      namespace: shopify
      baseUri: "https://aeropostale.myshopify.com/admin/api/2024-01"
      authentication:
        type: bearer
        token: "$secrets.shopify_token"
      resources:
        - name: reviews
          path: "/products/{{product_id}}/metafields.json?namespace=reviews"
          inputParameters:
            - name: product_id
              in: path
          operations:
            - name: get-product-reviews
              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"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

When a promotional campaign is approved, creates a MailChimp campaign with the teen-targeted segment, schedules the email send, and logs the campaign in Google Sheets for tracking.

naftiko: "0.5"
info:
  label: "Promotional Email Campaign Launcher"
  description: "When a promotional campaign is approved, creates a MailChimp campaign with the teen-targeted segment, schedules the email send, and logs the campaign in Google Sheets for tracking."
  tags:
    - marketing
    - email
    - mailchimp
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: email-campaigns
      port: 8080
      tools:
        - name: launch-promo-campaign
          description: "Create, schedule, and track a promotional email campaign targeting a specific audience segment."
          inputParameters:
            - name: campaign_name
              in: body
              type: string
              description: "Name of the promotional campaign."
            - name: segment_id
              in: body
              type: string
              description: "MailChimp segment ID for the target audience."
            - name: send_time
              in: body
              type: string
              description: "Scheduled send time in ISO 8601 format."
            - name: template_id
              in: body
              type: string
              description: "MailChimp template ID for the email."
          steps:
            - name: create-campaign
              type: call
              call: "mailchimp.create-campaign"
              with:
                name: "{{campaign_name}}"
                segment_id: "{{segment_id}}"
                template_id: "{{template_id}}"
            - name: schedule-campaign
              type: call
              call: "mailchimp.schedule-campaign"
              with:
                campaign_id: "{{create-campaign.id}}"
                send_time: "{{send_time}}"
            - name: log-campaign
              type: call
              call: "gsheets.append-row"
              with:
                spreadsheet_id: "aero_campaign_tracker"
                range: "Campaigns!A:E"
                values:
                  - "{{campaign_name}}"
                  - "{{create-campaign.id}}"
                  - "{{send_time}}"
                  - "{{segment_id}}"
                  - "scheduled"
  consumes:
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: create-campaign
              method: POST
        - name: campaign-actions
          path: "/campaigns/{{campaign_id}}/actions/schedule"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: schedule-campaign
              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

At end of season, identifies slow-moving inventory from POS data, applies progressive markdowns in Shopify, and generates a clearance report in Google Sheets for the buying team.

naftiko: "0.5"
info:
  label: "Seasonal Clearance Automation"
  description: "At end of season, identifies slow-moving inventory from POS data, applies progressive markdowns in Shopify, and generates a clearance report in Google Sheets for the buying team."
  tags:
    - retail
    - clearance
    - pos
    - shopify
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: clearance-mgmt
      port: 8080
      tools:
        - name: run-clearance-cycle
          description: "Identify slow movers, apply markdowns, and generate clearance reports."
          inputParameters:
            - name: season
              in: body
              type: string
              description: "Season being cleared."
            - name: markdown_tier
              in: body
              type: number
              description: "Markdown tier percentage."
            - name: sell_through_threshold
              in: body
              type: number
              description: "Sell-through percentage below which items get marked down."
          steps:
            - name: get-slow-movers
              type: call
              call: "pos.get-low-sell-through"
              with:
                season: "{{season}}"
                threshold: "{{sell_through_threshold}}"
            - name: apply-markdowns
              type: call
              call: "shopify.bulk-markdown"
              with:
                product_ids: "{{get-slow-movers.product_ids}}"
                discount_percent: "{{markdown_tier}}"
            - name: write-report
              type: call
              call: "gsheets.append-row"
              with:
                spreadsheet_id: "aero_clearance_reports"
                range: "{{season}}!A:D"
                values:
                  - "{{season}}"
                  - "{{get-slow-movers.count}}"
                  - "{{markdown_tier}}"
                  - "{{apply-markdowns.updated_count}}"
  consumes:
    - type: http
      namespace: pos
      baseUri: "https://pos.aeropostale.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pos_token"
      resources:
        - name: sell-through
          path: "/analytics/sell-through"
          operations:
            - name: get-low-sell-through
              method: GET
    - type: http
      namespace: shopify
      baseUri: "https://aeropostale.myshopify.com/admin/api/2024-01"
      authentication:
        type: bearer
        token: "$secrets.shopify_token"
      resources:
        - name: bulk-pricing
          path: "/price_rules.json"
          operations:
            - name: bulk-markdown
              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

When a new seasonal collection is approved in the merchandising system, creates product listings in Shopify, syncs inventory to the warehouse management system, publishes promotional content to Instagram, and notifies the visual merchandising team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Seasonal Collection Launch Orchestrator"
  description: "When a new seasonal collection is approved in the merchandising system, creates product listings in Shopify, syncs inventory to the warehouse management system, publishes promotional content to Instagram, and notifies the visual merchandising team in Microsoft Teams."
  tags:
    - retail
    - merchandising
    - shopify
    - instagram
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: merch-launch
      port: 8080
      tools:
        - name: launch-collection
          description: "Given a collection ID and launch date, orchestrate the full seasonal launch across e-commerce, social, and warehouse systems."
          inputParameters:
            - name: collection_id
              in: body
              type: string
              description: "The internal collection identifier."
            - name: launch_date
              in: body
              type: string
              description: "Target launch date in YYYY-MM-DD format."
            - name: season
              in: body
              type: string
              description: "Season name such as Spring, Summer, Fall, or Winter."
          steps:
            - name: get-collection
              type: call
              call: "shopify.get-collection"
              with:
                collection_id: "{{collection_id}}"
            - name: publish-products
              type: call
              call: "shopify.publish-collection"
              with:
                collection_id: "{{collection_id}}"
                publish_date: "{{launch_date}}"
            - name: sync-inventory
              type: call
              call: "wms.sync-collection-inventory"
              with:
                collection_id: "{{collection_id}}"
                warehouse: "aero_main_dc"
            - name: post-social
              type: call
              call: "instagram.create-post"
              with:
                caption: "New {{season}} collection just dropped! Shop now at Aéropostale. #Aeropostale #{{season}}"
                media_url: "{{get-collection.hero_image_url}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "visual_merch"
                text: "Collection {{collection_id}} for {{season}} is live. {{publish-products.product_count}} products published."
  consumes:
    - type: http
      namespace: shopify
      baseUri: "https://aeropostale.myshopify.com/admin/api/2024-01"
      authentication:
        type: bearer
        token: "$secrets.shopify_token"
      resources:
        - name: collections
          path: "/custom_collections/{{collection_id}}.json"
          inputParameters:
            - name: collection_id
              in: path
          operations:
            - name: get-collection
              method: GET
            - name: publish-collection
              method: PUT
    - type: http
      namespace: wms
      baseUri: "https://wms.aeropostale.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.wms_token"
      resources:
        - name: inventory-sync
          path: "/collections/{{collection_id}}/sync"
          inputParameters:
            - name: collection_id
              in: path
          operations:
            - name: sync-collection-inventory
              method: POST
    - type: http
      namespace: instagram
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: media
          path: "/me/media"
          operations:
            - name: create-post
              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"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Runs demand forecast models, generates buy recommendations, and distributes to merchandising teams.

naftiko: "0.5"
info:
  label: "Seasonal Demand Forecasting Pipeline"
  description: "Runs demand forecast models, generates buy recommendations, and distributes to merchandising teams."
  tags:
    - planning
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: planning
      port: 8080
      tools:
        - name: seasonal_demand_forecasting_pipeline
          description: "Orchestrate seasonal demand forecasting 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-powerbi
              type: call
              call: "powerbi.process-resource"
              with:
                data: "{{get-snowflake.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Seasonal Demand Forecasting Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://aeropostale.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: 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: powerbi-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

Detects security incidents, enriches with context, creates response tickets, and notifies the SOC.

naftiko: "0.5"
info:
  label: "Security Incident Response Pipeline"
  description: "Detects security incidents, enriches with context, creates response tickets, and notifies the SOC."
  tags:
    - security
    - splunk
    - servicenow
    - pagerduty
capability:
  exposes:
    - type: mcp
      namespace: security
      port: 8080
      tools:
        - name: security_incident_response_pipeline
          description: "Orchestrate security incident response 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-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                data: "{{get-salesforce.result}}"
            - name: create-jira
              type: call
              call: "jira.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Security Incident Response Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://aeropostale.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://aeropostale.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://aeropostale.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

Retrieves the current state, priority, and assigned group for a ServiceNow incident by number.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Status Lookup"
  description: "Retrieves the current state, priority, and assigned group for a ServiceNow incident by number."
  tags:
    - it-support
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: it-support
      port: 8080
      tools:
        - name: get-incident-status
          description: "Look up a ServiceNow incident by number and return its state and assignment."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "ServiceNow incident number such as INC0012345."
          call: "servicenow.get-incident"
          with:
            incident_number: "{{incident_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result.state"
            - name: priority
              type: string
              mapping: "$.result.priority"
            - name: assigned_group
              type: string
              mapping: "$.result.assignment_group.display_value"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://aeropostale.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident?sysparm_query=number={{incident_number}}"
          inputParameters:
            - name: incident_number
              in: path
          operations:
            - name: get-incident
              method: GET

Retrieves a document by path from a SharePoint site and returns its download URL and metadata.

naftiko: "0.5"
info:
  label: "SharePoint Document Retrieval"
  description: "Retrieves a document by path from a SharePoint site and returns its download URL and metadata."
  tags:
    - collaboration
    - sharepoint
    - document-management
capability:
  exposes:
    - type: mcp
      namespace: documents
      port: 8080
      tools:
        - name: get-document
          description: "Retrieve a document from SharePoint by site and file path."
          inputParameters:
            - name: site_id
              in: body
              type: string
              description: "SharePoint site identifier."
            - name: file_path
              in: body
              type: string
              description: "Path to the file within the site drive."
          call: "sharepoint.get-file"
          with:
            site_id: "{{site_id}}"
            file_path: "{{file_path}}"
          outputParameters:
            - name: download_url
              type: string
              mapping: "$.@microsoft.graph.downloadUrl"
            - name: last_modified
              type: string
              mapping: "$.lastModifiedDateTime"
            - name: size
              type: number
              mapping: "$.size"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: get-file
              method: GET

Queries multiple carrier APIs to compare shipping rates for a given package weight and destination, returning the cheapest option.

naftiko: "0.5"
info:
  label: "Shipping Carrier Rate Comparison"
  description: "Queries multiple carrier APIs to compare shipping rates for a given package weight and destination, returning the cheapest option."
  tags:
    - logistics
    - shipping
    - fulfillment
capability:
  exposes:
    - type: mcp
      namespace: shipping
      port: 8080
      tools:
        - name: compare-shipping-rates
          description: "Compare shipping rates across carriers for a package and return the optimal rate."
          inputParameters:
            - name: weight_lbs
              in: body
              type: number
              description: "Package weight in pounds."
            - name: destination_zip
              in: body
              type: string
              description: "Destination ZIP code."
            - name: origin_zip
              in: body
              type: string
              description: "Origin ZIP code."
          steps:
            - name: get-ups-rate
              type: call
              call: "ups.get-rate"
              with:
                weight: "{{weight_lbs}}"
                origin: "{{origin_zip}}"
                destination: "{{destination_zip}}"
            - name: get-fedex-rate
              type: call
              call: "fedex.get-rate"
              with:
                weight: "{{weight_lbs}}"
                origin: "{{origin_zip}}"
                destination: "{{destination_zip}}"
            - name: get-usps-rate
              type: call
              call: "usps.get-rate"
              with:
                weight: "{{weight_lbs}}"
                origin: "{{origin_zip}}"
                destination: "{{destination_zip}}"
  consumes:
    - type: http
      namespace: ups
      baseUri: "https://onlinetools.ups.com/api"
      authentication:
        type: bearer
        token: "$secrets.ups_token"
      resources:
        - name: rating
          path: "/rating/v1/rate"
          operations:
            - name: get-rate
              method: POST
    - type: http
      namespace: fedex
      baseUri: "https://apis.fedex.com/rate/v1"
      authentication:
        type: bearer
        token: "$secrets.fedex_token"
      resources:
        - name: rates
          path: "/rates/quotes"
          operations:
            - name: get-rate
              method: POST
    - type: http
      namespace: usps
      baseUri: "https://secure.shippingapis.com/ShippingAPI.dll"
      authentication:
        type: apikey
        key: "$secrets.usps_user_id"
      resources:
        - name: rate-calc
          path: "?API=RateV4"
          operations:
            - name: get-rate
              method: GET

Creates a new discount code in Shopify with specified parameters and returns the code and usage limits.

naftiko: "0.5"
info:
  label: "Shopify Discount Code Generator"
  description: "Creates a new discount code in Shopify with specified parameters and returns the code and usage limits."
  tags:
    - e-commerce
    - shopify
    - promotions
capability:
  exposes:
    - type: mcp
      namespace: promotions
      port: 8080
      tools:
        - name: create-discount-code
          description: "Generate a Shopify discount code with a specified percentage off and usage limit."
          inputParameters:
            - name: code
              in: body
              type: string
              description: "The discount code string."
            - name: discount_percent
              in: body
              type: number
              description: "Percentage discount."
            - name: usage_limit
              in: body
              type: number
              description: "Maximum number of uses."
          call: "shopify.create-price-rule-discount"
          with:
            code: "{{code}}"
            discount_percent: "{{discount_percent}}"
            usage_limit: "{{usage_limit}}"
          outputParameters:
            - name: discount_id
              type: string
              mapping: "$.discount_code.id"
            - name: code
              type: string
              mapping: "$.discount_code.code"
  consumes:
    - type: http
      namespace: shopify
      baseUri: "https://aeropostale.myshopify.com/admin/api/2024-01"
      authentication:
        type: bearer
        token: "$secrets.shopify_token"
      resources:
        - name: discount-codes
          path: "/price_rules/{{price_rule_id}}/discount_codes.json"
          inputParameters:
            - name: price_rule_id
              in: path
          operations:
            - name: create-price-rule-discount
              method: POST

Retrieves the current fulfillment status, shipping tracking number, and estimated delivery date for a given Shopify order.

naftiko: "0.5"
info:
  label: "Shopify Order Status Lookup"
  description: "Retrieves the current fulfillment status, shipping tracking number, and estimated delivery date for a given Shopify order."
  tags:
    - retail
    - e-commerce
    - shopify
    - order-status
capability:
  exposes:
    - type: mcp
      namespace: order-tracking
      port: 8080
      tools:
        - name: get-order-status
          description: "Look up an order by ID and return its fulfillment status, tracking number, and estimated delivery."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The Shopify order number."
          call: "shopify.get-order-fulfillment"
          with:
            order_id: "{{order_id}}"
          outputParameters:
            - name: fulfillment_status
              type: string
              mapping: "$.order.fulfillment_status"
            - name: tracking_number
              type: string
              mapping: "$.order.fulfillments[0].tracking_number"
            - name: estimated_delivery
              type: string
              mapping: "$.order.fulfillments[0].estimated_delivery_at"
  consumes:
    - type: http
      namespace: shopify
      baseUri: "https://aeropostale.myshopify.com/admin/api/2024-01"
      authentication:
        type: bearer
        token: "$secrets.shopify_token"
      resources:
        - name: order-fulfillments
          path: "/orders/{{order_id}}.json?fields=fulfillment_status,fulfillments"
          inputParameters:
            - name: order_id
              in: path
          operations:
            - name: get-order-fulfillment
              method: GET

Searches the Shopify product catalog by keyword, category, or tag and returns matching products with pricing and availability.

naftiko: "0.5"
info:
  label: "Shopify Product Catalog Search"
  description: "Searches the Shopify product catalog by keyword, category, or tag and returns matching products with pricing and availability."
  tags:
    - retail
    - e-commerce
    - shopify
    - product-catalog
capability:
  exposes:
    - type: mcp
      namespace: catalog
      port: 8080
      tools:
        - name: search-products
          description: "Search the Aéropostale product catalog by keyword, returning product name, price, and stock status."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "Search keyword or product tag."
          call: "shopify.search-products"
          with:
            query: "{{query}}"
          outputParameters:
            - name: products
              type: array
              mapping: "$.products"
            - name: total_count
              type: number
              mapping: "$.count"
  consumes:
    - type: http
      namespace: shopify
      baseUri: "https://aeropostale.myshopify.com/admin/api/2024-01"
      authentication:
        type: bearer
        token: "$secrets.shopify_token"
      resources:
        - name: products
          path: "/products.json"
          operations:
            - name: search-products
              method: GET

Checks whether a specific size variant is in stock for a given product across all channels including online and in-store.

naftiko: "0.5"
info:
  label: "Size Availability Checker"
  description: "Checks whether a specific size variant is in stock for a given product across all channels including online and in-store."
  tags:
    - retail
    - inventory
    - shopify
    - pos
capability:
  exposes:
    - type: mcp
      namespace: size-availability
      port: 8080
      tools:
        - name: check-size-availability
          description: "Check if a specific size is available for a product across online and store channels."
          inputParameters:
            - name: product_id
              in: body
              type: string
              description: "Product identifier."
            - name: size
              in: body
              type: string
              description: "Size to check such as S, M, L, or XL."
          steps:
            - name: check-online
              type: call
              call: "shopify.get-variant-inventory"
              with:
                product_id: "{{product_id}}"
                size: "{{size}}"
            - name: check-stores
              type: call
              call: "pos.get-size-stock"
              with:
                product_id: "{{product_id}}"
                size: "{{size}}"
  consumes:
    - type: http
      namespace: shopify
      baseUri: "https://aeropostale.myshopify.com/admin/api/2024-01"
      authentication:
        type: bearer
        token: "$secrets.shopify_token"
      resources:
        - name: inventory-levels
          path: "/products/{{product_id}}/variants.json"
          inputParameters:
            - name: product_id
              in: path
          operations:
            - name: get-variant-inventory
              method: GET
    - type: http
      namespace: pos
      baseUri: "https://pos.aeropostale.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pos_token"
      resources:
        - name: stock
          path: "/products/{{product_id}}/sizes/{{size}}/stock"
          inputParameters:
            - name: product_id
              in: path
            - name: size
              in: path
          operations:
            - name: get-size-stock
              method: GET

Monitors service levels, detects SLA breaches, creates escalation tickets, and reports to management.

naftiko: "0.5"
info:
  label: "SLA Compliance Monitoring Pipeline"
  description: "Monitors service levels, detects SLA breaches, creates escalation tickets, and reports to management."
  tags:
    - operations
    - datadog
    - servicenow
    - powerbi
capability:
  exposes:
    - type: mcp
      namespace: operations
      port: 8080
      tools:
        - name: sla_compliance_monitoring_pipeline
          description: "Orchestrate sla compliance 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-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                data: "{{get-datadog.result}}"
            - name: create-powerbi
              type: call
              call: "powerbi.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "SLA Compliance Monitoring Pipeline step 3 complete."

  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: servicenow
      baseUri: "https://aeropostale.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: 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: powerbi-op
              method: POST

Audits license usage, identifies underutilized licenses, recommends optimization, and notifies IT.

naftiko: "0.5"
info:
  label: "Software License Optimization Pipeline"
  description: "Audits license usage, identifies underutilized licenses, recommends optimization, and notifies IT."
  tags:
    - operations
    - servicenow
    - snowflake
    - slack
capability:
  exposes:
    - type: mcp
      namespace: operations
      port: 8080
      tools:
        - name: software_license_optimization
          description: "Orchestrate software license optimization pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-servicenow
              type: call
              call: "servicenow.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-snowflake
              type: call
              call: "snowflake.process-resource"
              with:
                data: "{{get-servicenow.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Software License Optimization Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://aeropostale.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: snowflake
      baseUri: "https://aeropostale.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 upcoming shift assignments from the workforce management system and sends weekly schedule reminders to store associates via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Store Associate Shift Scheduler"
  description: "Retrieves upcoming shift assignments from the workforce management system and sends weekly schedule reminders to store associates via Microsoft Teams."
  tags:
    - hr
    - workforce-management
    - scheduling
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: workforce
      port: 8080
      tools:
        - name: send-shift-reminders
          description: "Pull weekly shift schedule and send reminders to each associate via Teams."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "Store location identifier."
            - name: week_start
              in: body
              type: string
              description: "Start of the week in YYYY-MM-DD format."
          steps:
            - name: get-schedule
              type: call
              call: "wfm.get-weekly-schedule"
              with:
                store_id: "{{store_id}}"
                week_start: "{{week_start}}"
            - name: send-reminders
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "store_{{store_id}}_schedule"
                text: "Weekly schedule for store {{store_id}} starting {{week_start}}: {{get-schedule.summary}}. Check the full schedule at {{get-schedule.url}}."
  consumes:
    - type: http
      namespace: wfm
      baseUri: "https://wfm.aeropostale.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.wfm_token"
      resources:
        - name: schedules
          path: "/stores/{{store_id}}/schedules"
          inputParameters:
            - name: store_id
              in: path
          operations:
            - name: get-weekly-schedule
              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"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Queries the warehouse management system for current stock levels of a given SKU across all Aéropostale store locations and the distribution center.

naftiko: "0.5"
info:
  label: "Store Inventory Lookup"
  description: "Queries the warehouse management system for current stock levels of a given SKU across all Aéropostale store locations and the distribution center."
  tags:
    - retail
    - inventory
    - wms
capability:
  exposes:
    - type: mcp
      namespace: inventory
      port: 8080
      tools:
        - name: get-sku-inventory
          description: "Look up current inventory levels for a SKU across all store locations and the distribution center."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "The product SKU to look up."
          call: "wms.get-inventory"
          with:
            sku: "{{sku}}"
          outputParameters:
            - name: total_units
              type: number
              mapping: "$.data.total_available"
            - name: store_breakdown
              type: array
              mapping: "$.data.locations"
            - name: dc_units
              type: number
              mapping: "$.data.dc_available"
  consumes:
    - type: http
      namespace: wms
      baseUri: "https://wms.aeropostale.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.wms_token"
      resources:
        - name: inventory
          path: "/inventory/{{sku}}"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: get-inventory
              method: GET

Compares store metrics against benchmarks, identifies top and bottom performers, and distributes reports.

naftiko: "0.5"
info:
  label: "Store Performance Benchmark Pipeline"
  description: "Compares store metrics against benchmarks, identifies top and bottom performers, and distributes reports."
  tags:
    - analytics
    - snowflake
    - powerbi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: analytics
      port: 8080
      tools:
        - name: store_performance_benchmark_pipeline
          description: "Orchestrate store performance benchmark 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-powerbi
              type: call
              call: "powerbi.process-resource"
              with:
                data: "{{get-snowflake.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Store Performance Benchmark Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://aeropostale.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: 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: powerbi-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 daily sales data from the POS system, combines it with foot traffic analytics from Google Analytics, and writes a consolidated daily report row to Google Sheets for district manager review.

naftiko: "0.5"
info:
  label: "Store Performance Dashboard Builder"
  description: "Pulls daily sales data from the POS system, combines it with foot traffic analytics from Google Analytics, and writes a consolidated daily report row to Google Sheets for district manager review."
  tags:
    - retail
    - analytics
    - pos
    - google-analytics
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: store-performance
      port: 8080
      tools:
        - name: build-daily-report
          description: "Aggregate POS sales and GA foot traffic into a consolidated daily performance row."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "Store location identifier."
            - name: date
              in: body
              type: string
              description: "Report date in YYYY-MM-DD format."
          steps:
            - name: get-sales
              type: call
              call: "pos.get-daily-sales"
              with:
                store_id: "{{store_id}}"
                date: "{{date}}"
            - name: get-traffic
              type: call
              call: "ga.get-store-traffic"
              with:
                view_id: "store_{{store_id}}"
                date: "{{date}}"
            - name: write-report
              type: call
              call: "gsheets.append-row"
              with:
                spreadsheet_id: "aero_store_daily"
                range: "DailyPerformance!A:F"
                values:
                  - "{{date}}"
                  - "{{store_id}}"
                  - "{{get-sales.total_revenue}}"
                  - "{{get-sales.transaction_count}}"
                  - "{{get-traffic.visitors}}"
                  - "{{get-sales.avg_basket_size}}"
  consumes:
    - type: http
      namespace: pos
      baseUri: "https://pos.aeropostale.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pos_token"
      resources:
        - name: daily-sales
          path: "/stores/{{store_id}}/sales/{{date}}"
          inputParameters:
            - name: store_id
              in: path
            - name: date
              in: path
          operations:
            - name: get-daily-sales
              method: GET
    - type: http
      namespace: ga
      baseUri: "https://analyticsreporting.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/reports:batchGet"
          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}}:append"
          inputParameters:
            - name: spreadsheet_id
              in: path
            - name: range
              in: path
          operations:
            - name: append-row
              method: POST

Fetches the latest compliance certificates from the supplier portal, uploads them to SharePoint, and creates a Jira task for the compliance team to review.

naftiko: "0.5"
info:
  label: "Supplier Compliance Document Collector"
  description: "Fetches the latest compliance certificates from the supplier portal, uploads them to SharePoint, and creates a Jira task for the compliance team to review."
  tags:
    - procurement
    - compliance
    - sharepoint
    - jira
capability:
  exposes:
    - type: mcp
      namespace: supplier-compliance
      port: 8080
      tools:
        - name: collect-compliance-docs
          description: "Retrieve supplier compliance documents and route them for review."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "Vendor identifier."
            - name: document_type
              in: body
              type: string
              description: "Type of compliance document such as safety_cert or audit_report."
          steps:
            - name: get-document
              type: call
              call: "supplier-portal.get-document"
              with:
                vendor_id: "{{vendor_id}}"
                doc_type: "{{document_type}}"
            - name: upload-to-sharepoint
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "compliance_site"
                folder_path: "Suppliers/{{vendor_id}}/{{document_type}}"
                file_content: "{{get-document.file_content}}"
                file_name: "{{get-document.file_name}}"
            - name: create-review-task
              type: call
              call: "jira.create-issue"
              with:
                project: "COMPLIANCE"
                issue_type: "Task"
                summary: "Review {{document_type}} from vendor {{vendor_id}}"
                description: "Document uploaded to: {{upload-to-sharepoint.url}}"
  consumes:
    - type: http
      namespace: supplier-portal
      baseUri: "https://suppliers.aeropostale.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.supplier_portal_token"
      resources:
        - name: documents
          path: "/vendors/{{vendor_id}}/documents/{{doc_type}}"
          inputParameters:
            - name: vendor_id
              in: path
            - name: doc_type
              in: path
          operations:
            - name: get-document
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          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: upload-file
              method: PUT
    - type: http
      namespace: jira
      baseUri: "https://aeropostale.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Collects brand mention data from Instagram and Twitter, aggregates sentiment scores in Google Analytics, and posts a daily trend summary to a Microsoft Teams channel for the merchandising team.

naftiko: "0.5"
info:
  label: "Teen Trend Social Listening Pipeline"
  description: "Collects brand mention data from Instagram and Twitter, aggregates sentiment scores in Google Analytics, and posts a daily trend summary to a Microsoft Teams channel for the merchandising team."
  tags:
    - marketing
    - social-media
    - instagram
    - twitter
    - google-analytics
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: social-listening
      port: 8080
      tools:
        - name: generate-trend-report
          description: "Gather brand mentions from social channels, compute sentiment, and deliver a summary to the merchandising team."
          inputParameters:
            - name: date_range
              in: body
              type: string
              description: "Date range in YYYY-MM-DD/YYYY-MM-DD format."
            - name: brand_hashtags
              in: body
              type: array
              description: "Hashtags to track such as #Aeropostale and #AeroStyle."
          steps:
            - name: get-instagram-mentions
              type: call
              call: "instagram.get-mentions"
              with:
                hashtags: "{{brand_hashtags}}"
                since: "{{date_range}}"
            - name: get-twitter-mentions
              type: call
              call: "twitter.search-tweets"
              with:
                query: "Aeropostale OR #Aeropostale"
                since: "{{date_range}}"
            - name: log-analytics
              type: call
              call: "ga.log-social-event"
              with:
                event_category: "social_listening"
                instagram_count: "{{get-instagram-mentions.total}}"
                twitter_count: "{{get-twitter-mentions.total}}"
            - name: post-summary
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "merch_trends"
                text: "Daily Social Summary: Instagram mentions: {{get-instagram-mentions.total}}, Twitter mentions: {{get-twitter-mentions.total}}. Top trending topics: {{get-instagram-mentions.top_hashtags}}."
  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-mentions
              method: GET
    - type: http
      namespace: twitter
      baseUri: "https://api.twitter.com/2"
      authentication:
        type: bearer
        token: "$secrets.twitter_bearer_token"
      resources:
        - name: tweets-search
          path: "/tweets/search/recent"
          operations:
            - name: search-tweets
              method: GET
    - type: http
      namespace: ga
      baseUri: "https://www.googleapis.com/analytics/v3"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: events
          path: "/management/accounts/{{account_id}}/webproperties/{{property_id}}/events"
          operations:
            - name: log-social-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"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Monitors integration endpoints, detects failures, creates support tickets, and notifies integration team.

naftiko: "0.5"
info:
  label: "Third-Party Integration Health Pipeline"
  description: "Monitors integration endpoints, detects failures, creates support tickets, and notifies integration team."
  tags:
    - integrations
    - datadog
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: integrations
      port: 8080
      tools:
        - name: third_party_integration_health_pipeline
          description: "Orchestrate third-party integration health 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-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                data: "{{get-datadog.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Third-Party Integration Health Pipeline step 3 complete."

  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: servicenow
      baseUri: "https://aeropostale.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

Tracks mandatory training completion, sends reminders, escalates non-compliance, and reports status.

naftiko: "0.5"
info:
  label: "Training Compliance Tracker Pipeline"
  description: "Tracks mandatory training completion, sends reminders, escalates non-compliance, and reports status."
  tags:
    - compliance
    - workday
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: compliance
      port: 8080
      tools:
        - name: training_compliance_tracker_pipeline
          description: "Orchestrate training compliance tracker 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-servicenow
              type: call
              call: "servicenow.process-resource"
              with:
                data: "{{get-workday.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Training Compliance Tracker Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/api/v1/aeropostale"
      authentication:
        type: bearer
        token: "$secrets.workday_token" 
      resources:
        - name: resources
          path: "/resources/{{resource_id}}"
          operations:
            - name: workday-op
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://aeropostale.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

Posts a promotional tweet to the Aéropostale Twitter account with a product link and campaign hashtag.

naftiko: "0.5"
info:
  label: "Twitter Promotional Tweet Publisher"
  description: "Posts a promotional tweet to the Aéropostale Twitter account with a product link and campaign hashtag."
  tags:
    - marketing
    - social-media
    - twitter
capability:
  exposes:
    - type: mcp
      namespace: twitter-marketing
      port: 8080
      tools:
        - name: post-promo-tweet
          description: "Publish a promotional tweet on the brand Twitter account."
          inputParameters:
            - name: tweet_text
              in: body
              type: string
              description: "Tweet content including hashtags and links."
          call: "twitter.create-tweet"
          with:
            text: "{{tweet_text}}"
          outputParameters:
            - name: tweet_id
              type: string
              mapping: "$.data.id"
            - name: tweet_url
              type: string
              mapping: "$.data.url"
  consumes:
    - 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

Reconciles vendor invoices with POs, flags discrepancies, processes payments, and sends remittances.

naftiko: "0.5"
info:
  label: "Vendor Payment Reconciliation Pipeline"
  description: "Reconciles vendor invoices with POs, flags discrepancies, processes payments, and sends remittances."
  tags:
    - finance
    - servicenow
    - salesforce
    - slack
capability:
  exposes:
    - type: mcp
      namespace: finance
      port: 8080
      tools:
        - name: vendor_payment_reconciliation_pipeline
          description: "Orchestrate vendor payment reconciliation pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-servicenow
              type: call
              call: "servicenow.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-salesforce
              type: call
              call: "salesforce.process-resource"
              with:
                data: "{{get-servicenow.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Vendor Payment Reconciliation Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://aeropostale.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: salesforce
      baseUri: "https://aeropostale.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

When inventory for a top-selling SKU falls below threshold, creates a purchase order in the OMS for the designated vendor, logs the PO in Google Sheets, and alerts the buying team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Vendor Purchase Order Creator"
  description: "When inventory for a top-selling SKU falls below threshold, creates a purchase order in the OMS for the designated vendor, logs the PO in Google Sheets, and alerts the buying team in Microsoft Teams."
  tags:
    - procurement
    - inventory
    - oms
    - google-sheets
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: create-replenishment-po
          description: "Generate a purchase order for a low-stock SKU and notify the buying team."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "Product SKU needing replenishment."
            - name: vendor_id
              in: body
              type: string
              description: "Vendor identifier."
            - name: quantity
              in: body
              type: number
              description: "Quantity to order."
          steps:
            - name: create-po
              type: call
              call: "oms.create-purchase-order"
              with:
                sku: "{{sku}}"
                vendor_id: "{{vendor_id}}"
                quantity: "{{quantity}}"
            - name: log-po
              type: call
              call: "gsheets.append-row"
              with:
                spreadsheet_id: "aero_po_tracker"
                range: "POs!A:D"
                values:
                  - "{{create-po.po_number}}"
                  - "{{sku}}"
                  - "{{vendor_id}}"
                  - "{{quantity}}"
            - name: notify-buyers
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "buying_team"
                text: "PO {{create-po.po_number}} created for SKU {{sku}}: {{quantity}} units from vendor {{vendor_id}}."
  consumes:
    - type: http
      namespace: oms
      baseUri: "https://oms.aeropostale.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.oms_token"
      resources:
        - name: purchase-orders
          path: "/purchase-orders"
          operations:
            - name: create-purchase-order
              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
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Evaluates vendor security posture, scores risk, creates assessment records, and notifies procurement.

naftiko: "0.5"
info:
  label: "Vendor Risk Assessment Pipeline"
  description: "Evaluates vendor security posture, scores risk, creates assessment records, and notifies procurement."
  tags:
    - procurement
    - servicenow
    - confluence
    - slack
capability:
  exposes:
    - type: mcp
      namespace: procurement
      port: 8080
      tools:
        - name: vendor_risk_assessment_pipeline
          description: "Orchestrate vendor risk assessment pipeline workflow."
          inputParameters:
            - name: resource_id
              in: body
              type: string
              description: "Primary resource identifier." 
          steps:
            - name: get-servicenow
              type: call
              call: "servicenow.get-resource"
              with:
                resource_id: "{{resource_id}}"
            - name: process-confluence
              type: call
              call: "confluence.process-resource"
              with:
                data: "{{get-servicenow.result}}"
            - name: create-slack
              type: call
              call: "slack.create-resource"
              with:
                channel: "{{notification_channel}}"
                text: "Vendor Risk Assessment Pipeline step 3 complete."

  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://aeropostale.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: confluence
      baseUri: "https://aeropostale.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-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 planogram is uploaded to SharePoint, notifies store managers via Microsoft Teams and creates a Jira task for the visual merchandising team to verify in-store compliance.

naftiko: "0.5"
info:
  label: "Visual Merchandising Planogram Sync"
  description: "When a new planogram is uploaded to SharePoint, notifies store managers via Microsoft Teams and creates a Jira task for the visual merchandising team to verify in-store compliance."
  tags:
    - retail
    - visual-merchandising
    - sharepoint
    - microsoft-teams
    - jira
capability:
  exposes:
    - type: mcp
      namespace: planograms
      port: 8080
      tools:
        - name: distribute-planogram
          description: "Distribute a new planogram to store managers and create compliance verification tasks."
          inputParameters:
            - name: planogram_id
              in: body
              type: string
              description: "Planogram document identifier."
            - name: store_region
              in: body
              type: string
              description: "Target store region."
            - name: effective_date
              in: body
              type: string
              description: "Date the planogram takes effect."
          steps:
            - name: get-planogram
              type: call
              call: "sharepoint.get-file"
              with:
                site_id: "visual_merch_site"
                file_path: "Planograms/{{planogram_id}}"
            - name: notify-managers
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "store_managers_{{store_region}}"
                text: "New planogram {{planogram_id}} is available effective {{effective_date}}. Download: {{get-planogram.download_url}}"
            - name: create-task
              type: call
              call: "jira.create-issue"
              with:
                project: "VM"
                issue_type: "Task"
                summary: "Verify planogram {{planogram_id}} compliance in {{store_region}}"
                due_date: "{{effective_date}}"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site_id}}/drive/root:/{{file_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: get-file
              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"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://aeropostale.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

When a shipment arrives at the distribution center, confirms receipt in the WMS, updates the purchase order status in the OMS, and notifies the buying team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Warehouse Receiving Confirmation Pipeline"
  description: "When a shipment arrives at the distribution center, confirms receipt in the WMS, updates the purchase order status in the OMS, and notifies the buying team via Microsoft Teams."
  tags:
    - logistics
    - warehouse
    - wms
    - oms
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: warehouse-receiving
      port: 8080
      tools:
        - name: confirm-receiving
          description: "Confirm receipt of a vendor shipment and propagate updates across systems."
          inputParameters:
            - name: shipment_id
              in: body
              type: string
              description: "Inbound shipment identifier."
            - name: po_number
              in: body
              type: string
              description: "Related purchase order number."
            - name: units_received
              in: body
              type: number
              description: "Total units received."
          steps:
            - name: confirm-wms
              type: call
              call: "wms.confirm-receipt"
              with:
                shipment_id: "{{shipment_id}}"
                units_received: "{{units_received}}"
            - name: update-po
              type: call
              call: "oms.update-po-status"
              with:
                po_number: "{{po_number}}"
                status: "received"
                units_received: "{{units_received}}"
            - name: notify-buyers
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "buying_team"
                text: "Shipment {{shipment_id}} received: {{units_received}} units for PO {{po_number}}."
  consumes:
    - type: http
      namespace: wms
      baseUri: "https://wms.aeropostale.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.wms_token"
      resources:
        - name: receiving
          path: "/shipments/{{shipment_id}}/receive"
          inputParameters:
            - name: shipment_id
              in: path
          operations:
            - name: confirm-receipt
              method: POST
    - type: http
      namespace: oms
      baseUri: "https://oms.aeropostale.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.oms_token"
      resources:
        - name: purchase-orders
          path: "/purchase-orders/{{po_number}}/status"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: update-po-status
              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"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Generates the weekly markdown schedule from the merchandising system, publishes it to SharePoint, and sends a notification to store managers via Microsoft Teams with the download link.

naftiko: "0.5"
info:
  label: "Weekly Markdown Calendar Publisher"
  description: "Generates the weekly markdown schedule from the merchandising system, publishes it to SharePoint, and sends a notification to store managers via Microsoft Teams with the download link."
  tags:
    - retail
    - merchandising
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: markdown-calendar
      port: 8080
      tools:
        - name: publish-markdown-calendar
          description: "Generate and distribute the weekly markdown schedule to all stores."
          inputParameters:
            - name: week_of
              in: body
              type: string
              description: "Week starting date."
          steps:
            - name: get-markdowns
              type: call
              call: "merch.get-weekly-markdowns"
              with:
                week_of: "{{week_of}}"
            - name: upload-calendar
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "merch_site"
                folder_path: "MarkdownCalendars/Week_{{week_of}}"
                file_name: "markdown_calendar_{{week_of}}.xlsx"
                file_content: "{{get-markdowns.file_content}}"
            - name: notify-managers
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "store_managers"
                text: "Weekly markdown calendar for week of {{week_of}} is ready. Download: {{upload-calendar.url}}"
  consumes:
    - type: http
      namespace: merch
      baseUri: "https://merch.aeropostale.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.merch_token"
      resources:
        - name: markdowns
          path: "/markdowns/weekly"
          operations:
            - name: get-weekly-markdowns
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          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: upload-file
              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"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves view count, likes, and engagement metrics for a specified YouTube video on the Aéropostale brand channel.

naftiko: "0.5"
info:
  label: "YouTube Brand Content Metrics"
  description: "Retrieves view count, likes, and engagement metrics for a specified YouTube video on the Aéropostale brand channel."
  tags:
    - marketing
    - social-media
    - youtube
capability:
  exposes:
    - type: mcp
      namespace: youtube-analytics
      port: 8080
      tools:
        - name: get-video-metrics
          description: "Fetch YouTube video performance metrics by video ID."
          inputParameters:
            - name: video_id
              in: body
              type: string
              description: "YouTube video ID."
          call: "youtube.get-video-stats"
          with:
            video_id: "{{video_id}}"
          outputParameters:
            - name: view_count
              type: number
              mapping: "$.items[0].statistics.viewCount"
            - name: like_count
              type: number
              mapping: "$.items[0].statistics.likeCount"
            - name: comment_count
              type: number
              mapping: "$.items[0].statistics.commentCount"
  consumes:
    - type: http
      namespace: youtube
      baseUri: "https://www.googleapis.com/youtube/v3"
      authentication:
        type: apikey
        key: "$secrets.youtube_api_key"
      resources:
        - name: videos
          path: "/videos?part=statistics&id={{video_id}}"
          inputParameters:
            - name: video_id
              in: path
          operations:
            - name: get-video-stats
              method: GET