Gap Capabilities

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

Sort
Expand

Reviews access at Gap via Okta, IAM, and Jira.

naftiko: "0.5"
info:
  label: "Access Review Pipeline"
  description: "Reviews access at Gap via Okta, IAM, and Jira."
  tags:
    - security
    - access-management
    - okta
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: access-rev
      port: 8080
      tools:
        - name: review
          description: "Review access at Gap."
          inputParameters:
            - name: dept
              in: body
              type: string
              description: "Department."
          steps:
            - name: ent
              type: call
              call: "okta.get-users"
              with:
                dept: "{{dept}}"
            - name: compare
              type: call
              call: "iam.compare"
              with:
                data: "{{ent.data}}"
            - name: flag
              type: call
              call: "iam.flag"
              with:
                violations: "{{compare.violations}}"
            - name: fix
              type: call
              call: "jira.create-issue"
              with:
                project: "IAM"
                summary: "Violations in {{dept}}"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://gap.com.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_api_token"
      resources:
        - name: users
          path: "/users"
          operations:
            - name: get-users
              method: GET
    - type: http
      namespace: iam
      baseUri: "https://iam.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.iam_token"
      resources:
        - name: reviews
          path: "/compare"
          operations:
            - name: compare
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://gap.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Pulls conversion funnel data from Adobe Analytics for a specified date range and report suite, showing drop-off at each stage.

naftiko: "0.5"
info:
  label: "Adobe Analytics Conversion Funnel"
  description: "Pulls conversion funnel data from Adobe Analytics for a specified date range and report suite, showing drop-off at each stage."
  tags:
    - e-commerce
    - analytics
    - adobe-analytics
capability:
  exposes:
    - type: mcp
      namespace: conversion-analytics
      port: 8080
      tools:
        - name: get-conversion-funnel
          description: "Retrieve conversion funnel metrics from Adobe Analytics for a date range. Returns step-by-step conversion rates."
          inputParameters:
            - name: report_suite_id
              in: body
              type: string
              description: "The Adobe Analytics report suite ID."
            - 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: "adobe-analytics.get-report"
          with:
            rsid: "{{report_suite_id}}"
            start_date: "{{start_date}}"
            end_date: "{{end_date}}"
  consumes:
    - type: http
      namespace: adobe-analytics
      baseUri: "https://analytics.adobe.io/api"
      authentication:
        type: bearer
        token: "$secrets.adobe_analytics_token"
      inputParameters:
        - name: x-api-key
          in: header
          value: "$secrets.adobe_api_key"
      resources:
        - name: reports
          path: "/{{rsid}}/reports"
          inputParameters:
            - name: rsid
              in: path
          operations:
            - name: get-report
              method: POST

Searches Adobe Creative Cloud Libraries for brand assets by keyword, returning asset names, types, thumbnails, and download links for the design team.

naftiko: "0.5"
info:
  label: "Adobe Creative Cloud Asset Search"
  description: "Searches Adobe Creative Cloud Libraries for brand assets by keyword, returning asset names, types, thumbnails, and download links for the design team."
  tags:
    - marketing
    - creative
    - adobe-creative-cloud
capability:
  exposes:
    - type: mcp
      namespace: creative-assets
      port: 8080
      tools:
        - name: search-cc-assets
          description: "Search Adobe CC Libraries by keyword. Returns matching assets with metadata and URLs."
          inputParameters:
            - name: keyword
              in: body
              type: string
              description: "Search keyword for creative assets."
            - name: library_id
              in: body
              type: string
              description: "The Adobe CC Library ID."
          call: "adobe-cc.search-assets"
          with:
            query: "{{keyword}}"
            library_id: "{{library_id}}"
  consumes:
    - type: http
      namespace: adobe-cc
      baseUri: "https://cc-libraries.adobe.io/api/v1"
      authentication:
        type: bearer
        token: "$secrets.adobe_cc_token"
      resources:
        - name: libraries
          path: "/libraries/{{library_id}}/elements"
          inputParameters:
            - name: library_id
              in: path
          operations:
            - name: search-assets
              method: GET

Manages API deprecation at Gap via consumer identification, notices, and tracking.

naftiko: "0.5"
info:
  label: "API Deprecation Pipeline"
  description: "Manages API deprecation at Gap via consumer identification, notices, and tracking."
  tags:
    - api-management
    - communications
    - governance
capability:
  exposes:
    - type: mcp
      namespace: api-sunset
      port: 8080
      tools:
        - name: notify-sunset
          description: "Manage API sunset at Gap."
          inputParameters:
            - name: api
              in: body
              type: string
              description: "API name."
            - name: date
              in: body
              type: string
              description: "Sunset date."
          steps:
            - name: consumers
              type: call
              call: "api-gw.consumers"
              with:
                api: "{{api}}"
            - name: notify
              type: call
              call: "email.batch"
              with:
                to: "{{consumers.emails}}"
                subject: "{{api}} sunset: {{date}}"
            - name: track
              type: call
              call: "analytics.usage"
              with:
                api: "{{api}}"
            - name: ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "API"
                summary: "Sunset {{api}} by {{date}}"
  consumes:
    - type: http
      namespace: api-gw
      baseUri: "https://api-gw.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.api_gw_token"
      resources:
        - name: consumers
          path: "/apis/{{api}}/consumers"
          inputParameters:
            - name: api
              in: path
          operations:
            - name: consumers
              method: GET
    - type: http
      namespace: email
      baseUri: "https://email.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: batch
          path: "/send-batch"
          operations:
            - name: batch
              method: POST
    - type: http
      namespace: analytics
      baseUri: "https://analytics.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: usage
          path: "/api-usage"
          operations:
            - name: usage
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://gap.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

Retrieves the current month Azure spend summary from Azure Cost Management for Gap's cloud infrastructure.

naftiko: "0.5"
info:
  label: "Azure Cloud Cost Summary"
  description: "Retrieves the current month Azure spend summary from Azure Cost Management for Gap's cloud infrastructure."
  tags:
    - infrastructure
    - cloud
    - microsoft-azure
capability:
  exposes:
    - type: mcp
      namespace: cloud-cost
      port: 8080
      tools:
        - name: get-azure-cost-summary
          description: "Retrieve current month Azure cost summary by resource group. Returns total spend, top resource groups, and month-over-month change."
          inputParameters:
            - name: subscription_id
              in: body
              type: string
              description: "The Azure subscription ID."
            - name: billing_period
              in: body
              type: string
              description: "Billing period in YYYYMM format."
          call: "azure.get-cost-summary"
          with:
            subscription_id: "{{subscription_id}}"
            billing_period: "{{billing_period}}"
  consumes:
    - type: http
      namespace: azure
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_mgmt_token"
      resources:
        - name: cost-management
          path: "/subscriptions/{{subscription_id}}/providers/Microsoft.CostManagement/query"
          inputParameters:
            - name: subscription_id
              in: path
          operations:
            - name: get-cost-summary
              method: POST

Checks build at Gap.

naftiko: "0.5"
info:
  label: "Azure DevOps Build Check"
  description: "Checks build at Gap."
  tags:
    - devops
    - azure-devops
    - ci-cd
capability:
  exposes:
    - type: mcp
      namespace: azdo-build
      port: 8080
      tools:
        - name: check-build
          description: "Check build at Gap."
          inputParameters:
            - name: project
              in: body
              type: string
              description: "Project."
            - name: build_id
              in: body
              type: string
              description: "Build ID."
          call: "azdo.get-build"
          with:
            project: "{{project}}"
            build_id: "{{build_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: azdo
      baseUri: "https://dev.azure.com/gap.com"
      authentication:
        type: bearer
        token: "$secrets.azdo_token"
      resources:
        - name: builds
          path: "/{{project}}/_apis/build/builds/{{build_id}}"
          inputParameters:
            - name: project
              in: path
            - name: build_id
              in: path
          operations:
            - name: get-build
              method: GET

Verifies backups at Gap.

naftiko: "0.5"
info:
  label: "Backup Verification Pipeline"
  description: "Verifies backups at Gap."
  tags:
    - database
    - backup
    - operations
capability:
  exposes:
    - type: mcp
      namespace: backup-verify
      port: 8080
      tools:
        - name: verify-backups
          description: "Verify backups at Gap."
          inputParameters:
            - name: db
              in: body
              type: string
              description: "Database."
            - name: date
              in: body
              type: string
              description: "Backup date."
          steps:
            - name: status
              type: call
              call: "backup.get-status"
              with:
                db: "{{db}}"
                date: "{{date}}"
            - name: verify
              type: call
              call: "backup.verify"
              with:
                id: "{{status.backup_id}}"
            - name: log
              type: call
              call: "snowflake.query"
              with:
                query: "INSERT INTO backup_log VALUES ('{{db}}','{{date}}','{{verify.status}}')"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#dba"
                text: "Backup {{db}}: {{verify.status}}"
  consumes:
    - type: http
      namespace: backup
      baseUri: "https://backup.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.backup_token"
      resources:
        - name: backups
          path: "/databases/{{db}}/status"
          inputParameters:
            - name: db
              in: path
          operations:
            - name: get-status
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://gap.com.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Analyzes budget variance at Gap via Oracle, Workday, and Slack.

naftiko: "0.5"
info:
  label: "Budget Variance Pipeline"
  description: "Analyzes budget variance at Gap via Oracle, Workday, and Slack."
  tags:
    - finance
    - budget
    - oracle
    - workday
capability:
  exposes:
    - type: mcp
      namespace: budget-var
      port: 8080
      tools:
        - name: analyze-variance
          description: "Check budget variance at Gap."
          inputParameters:
            - name: cc
              in: body
              type: string
              description: "Cost center."
            - name: period
              in: body
              type: string
              description: "Period."
          steps:
            - name: actuals
              type: call
              call: "oracle.get-actuals"
              with:
                cc: "{{cc}}"
                period: "{{period}}"
            - name: budget
              type: call
              call: "workday.get-budget"
              with:
                cc: "{{cc}}"
            - name: compute
              type: call
              call: "analytics.variance"
              with:
                a: "{{actuals.total}}"
                b: "{{budget.total}}"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#finance"
                text: "Variance {{cc}}: ${{compute.variance}}"
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://oracle.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: fin
          path: "/actuals"
          operations:
            - name: get-actuals
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd5.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: budgets
          path: "/budgets"
          operations:
            - name: get-budget
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://analytics.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: var
          path: "/compute"
          operations:
            - name: variance
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Plans capacity at Gap by collecting utilization and forecasting.

naftiko: "0.5"
info:
  label: "Capacity Planning Pipeline"
  description: "Plans capacity at Gap by collecting utilization and forecasting."
  tags:
    - infrastructure
    - capacity-planning
    - forecasting
capability:
  exposes:
    - type: mcp
      namespace: capacity
      port: 8080
      tools:
        - name: plan-capacity
          description: "Plan capacity at Gap."
          inputParameters:
            - name: resource
              in: body
              type: string
              description: "Resource type."
            - name: months
              in: body
              type: number
              description: "Forecast months."
          steps:
            - name: util
              type: call
              call: "monitoring.get-util"
              with:
                resource: "{{resource}}"
            - name: forecast
              type: call
              call: "analytics.forecast"
              with:
                current: "{{util.pct}}"
                months: "{{months}}"
            - name: procure
              type: call
              call: "servicenow.create-request"
              with:
                type: "capacity"
                resource: "{{resource}}"
            - name: dashboard
              type: call
              call: "power-bi.refresh"
              with:
                dataset: "capacity"
  consumes:
    - type: http
      namespace: monitoring
      baseUri: "https://monitoring.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.monitoring_token"
      resources:
        - name: util
          path: "/resources/{{resource}}/util"
          inputParameters:
            - name: resource
              in: path
          operations:
            - name: get-util
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://analytics.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: forecast
          path: "/demand"
          operations:
            - name: forecast
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://gap.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset}}/refreshes"
          inputParameters:
            - name: dataset
              in: path
          operations:
            - name: refresh
              method: POST

Monitors cert expiry at Gap.

naftiko: "0.5"
info:
  label: "Certificate Expiry Pipeline"
  description: "Monitors cert expiry at Gap."
  tags:
    - security
    - certificates
    - monitoring
capability:
  exposes:
    - type: mcp
      namespace: cert-monitor
      port: 8080
      tools:
        - name: check-certs
          description: "Monitor certs at Gap."
          inputParameters:
            - name: domains
              in: body
              type: string
              description: "Domains to check."
          steps:
            - name: scan
              type: call
              call: "cert-scanner.scan"
              with:
                domains: "{{domains}}"
            - name: filter
              type: call
              call: "analytics.filter-expiring"
              with:
                certs: "{{scan.results}}"
            - name: ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "SEC"
                summary: "{{filter.count}} certs expiring"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#security"
                text: "Cert alert: {{filter.count}} expiring"
  consumes:
    - type: http
      namespace: cert-scanner
      baseUri: "https://certs.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.cert_token"
      resources:
        - name: scans
          path: "/scan"
          operations:
            - name: scan
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://gap.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Routes changes at Gap through ServiceNow and CAB approval.

naftiko: "0.5"
info:
  label: "Change Management Pipeline"
  description: "Routes changes at Gap through ServiceNow and CAB approval."
  tags:
    - change-management
    - servicenow
    - itil
capability:
  exposes:
    - type: mcp
      namespace: change-mgmt
      port: 8080
      tools:
        - name: process-change
          description: "Process changes at Gap."
          inputParameters:
            - name: change_id
              in: body
              type: string
              description: "Change ID."
            - name: date
              in: body
              type: string
              description: "Date."
          steps:
            - name: get
              type: call
              call: "servicenow.get-change"
              with:
                id: "{{change_id}}"
            - name: conflicts
              type: call
              call: "servicenow.check-conflicts"
              with:
                date: "{{date}}"
            - name: submit
              type: call
              call: "servicenow.update"
              with:
                id: "{{change_id}}"
                state: "approval"
            - name: notify
              type: call
              call: "email.send"
              with:
                to: "cab@co.com"
                subject: "CAB: {{change_id}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://gap.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: changes
          path: "/table/change_request/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-change
              method: GET
    - type: http
      namespace: email
      baseUri: "https://email.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST

Queries Cisco DNA Center for network device health at Gap store locations, returning device uptime, connectivity status, and any active alerts.

naftiko: "0.5"
info:
  label: "Cisco Network Health Check"
  description: "Queries Cisco DNA Center for network device health at Gap store locations, returning device uptime, connectivity status, and any active alerts."
  tags:
    - infrastructure
    - networking
    - cisco
capability:
  exposes:
    - type: mcp
      namespace: network-ops
      port: 8080
      tools:
        - name: check-network-health
          description: "Check network device health for a specific store site via Cisco DNA Center. Returns device count, health score, and active issues."
          inputParameters:
            - name: site_name
              in: body
              type: string
              description: "The site name in Cisco DNA Center (store location)."
          call: "cisco.get-site-health"
          with:
            site_name: "{{site_name}}"
  consumes:
    - type: http
      namespace: cisco
      baseUri: "https://gap-dnac.cisco.com/dna/intent/api/v1"
      authentication:
        type: bearer
        token: "$secrets.cisco_dnac_token"
      resources:
        - name: site-health
          path: "/site-health"
          operations:
            - name: get-site-health
              method: GET

Optimizes cloud costs at Gap via Azure, FinOps, Jira, and Power BI.

naftiko: "0.5"
info:
  label: "Cloud Cost Optimization Pipeline"
  description: "Optimizes cloud costs at Gap via Azure, FinOps, Jira, and Power BI."
  tags:
    - cloud
    - cost-management
    - finops
capability:
  exposes:
    - type: mcp
      namespace: cloud-opt
      port: 8080
      tools:
        - name: optimize
          description: "Optimize cloud costs at Gap."
          inputParameters:
            - name: provider
              in: body
              type: string
              description: "Provider."
            - name: range
              in: body
              type: string
              description: "Range."
          steps:
            - name: spend
              type: call
              call: "cloud.get-costs"
              with:
                provider: "{{provider}}"
                range: "{{range}}"
            - name: savings
              type: call
              call: "finops.analyze"
              with:
                data: "{{spend.data}}"
            - name: action
              type: call
              call: "jira.create-issue"
              with:
                project: "FINOPS"
                summary: "Save ${{savings.potential}}"
            - name: report
              type: call
              call: "power-bi.refresh"
              with:
                dataset: "cloud"
  consumes:
    - type: http
      namespace: cloud
      baseUri: "https://management.azure.com"
      authentication:
        type: bearer
        token: "$secrets.azure_token"
      resources:
        - name: costs
          path: "/providers/Microsoft.CostManagement/query"
          operations:
            - name: get-costs
              method: POST
    - type: http
      namespace: finops
      baseUri: "https://finops.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.finops_token"
      resources:
        - name: analysis
          path: "/savings"
          operations:
            - name: analyze
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://gap.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset}}/refreshes"
          inputParameters:
            - name: dataset
              in: path
          operations:
            - name: refresh
              method: POST

Retrieves Cloudflare CDN analytics for Gap.com including cache hit ratio, bandwidth saved, total requests, and threat mitigation stats.

naftiko: "0.5"
info:
  label: "Cloudflare CDN Performance"
  description: "Retrieves Cloudflare CDN analytics for Gap.com including cache hit ratio, bandwidth saved, total requests, and threat mitigation stats."
  tags:
    - e-commerce
    - infrastructure
    - cloudflare
capability:
  exposes:
    - type: mcp
      namespace: cdn-ops
      port: 8080
      tools:
        - name: get-cdn-analytics
          description: "Retrieve Cloudflare analytics for a zone over a date range. Returns requests, bandwidth, cache ratio, and threats blocked."
          inputParameters:
            - name: zone_id
              in: body
              type: string
              description: "The Cloudflare zone ID for gap.com."
            - name: since
              in: body
              type: string
              description: "Start datetime in ISO 8601 format."
          call: "cloudflare.get-zone-analytics"
          with:
            zone_id: "{{zone_id}}"
            since: "{{since}}"
  consumes:
    - type: http
      namespace: cloudflare
      baseUri: "https://api.cloudflare.com/client/v4"
      authentication:
        type: bearer
        token: "$secrets.cloudflare_token"
      resources:
        - name: analytics
          path: "/zones/{{zone_id}}/analytics/dashboard"
          inputParameters:
            - name: zone_id
              in: path
          operations:
            - name: get-zone-analytics
              method: GET

Searches Confluence at Gap.

naftiko: "0.5"
info:
  label: "Confluence Article Search"
  description: "Searches Confluence at Gap."
  tags:
    - knowledge-management
    - confluence
    - documentation
capability:
  exposes:
    - type: mcp
      namespace: confluence-search
      port: 8080
      tools:
        - name: search-articles
          description: "Search Confluence at Gap."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "Query."
          call: "confluence.search"
          with:
            query: "{{query}}"
          outputParameters:
            - name: title
              type: string
              mapping: "$.results[0].title"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://gap.com.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: content
          path: "/content/search"
          operations:
            - name: search
              method: GET

Searches Gap's Confluence knowledge base by keyword and returns matching pages with title, space, last updated date, and direct URL.

naftiko: "0.5"
info:
  label: "Confluence Knowledge Base Search"
  description: "Searches Gap's Confluence knowledge base by keyword and returns matching pages with title, space, last updated date, and direct URL."
  tags:
    - knowledge-management
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: knowledge-base
      port: 8080
      tools:
        - name: search-knowledge-base
          description: "Search Confluence by keyword. Returns matching page titles, spaces, and URLs."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "The search keyword or phrase."
          call: "confluence.search"
          with:
            cql: "text~\"{{query}}\""
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://gap.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_token"
      resources:
        - name: search
          path: "/search"
          operations:
            - name: search
              method: GET

Tracks contract renewals at Gap via contracts system, email, Jira, and Salesforce.

naftiko: "0.5"
info:
  label: "Contract Renewal Pipeline"
  description: "Tracks contract renewals at Gap via contracts system, email, Jira, and Salesforce."
  tags:
    - procurement
    - contracts
    - salesforce
    - jira
capability:
  exposes:
    - type: mcp
      namespace: contract-renew
      port: 8080
      tools:
        - name: track
          description: "Track renewals at Gap."
          inputParameters:
            - name: contract_id
              in: body
              type: string
              description: "Contract ID."
            - name: owner
              in: body
              type: string
              description: "Owner email."
          steps:
            - name: get
              type: call
              call: "contracts.get"
              with:
                id: "{{contract_id}}"
            - name: remind
              type: call
              call: "email.send"
              with:
                to: "{{owner}}"
                subject: "Renewal: {{contract_id}}"
            - name: task
              type: call
              call: "jira.create-issue"
              with:
                project: "PROC"
                summary: "Renew {{contract_id}}"
            - name: crm
              type: call
              call: "salesforce.update"
              with:
                id: "{{contract_id}}"
                stage: "Renewal"
  consumes:
    - type: http
      namespace: contracts
      baseUri: "https://contracts.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.contracts_token"
      resources:
        - name: contracts
          path: "/contracts/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get
              method: GET
    - type: http
      namespace: email
      baseUri: "https://email.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://gap.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://gap.com.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opps
          path: "/sobjects/Opportunity"
          operations:
            - name: update
              method: PATCH

Reallocates costs at Gap.

naftiko: "0.5"
info:
  label: "Cost Reallocation Pipeline"
  description: "Reallocates costs at Gap."
  tags:
    - finance
    - cost-allocation
    - oracle
capability:
  exposes:
    - type: mcp
      namespace: cost-realloc
      port: 8080
      tools:
        - name: reallocate
          description: "Reallocate costs at Gap."
          inputParameters:
            - name: source
              in: body
              type: string
              description: "Source CC."
            - name: target
              in: body
              type: string
              description: "Target CC."
            - name: amount
              in: body
              type: number
              description: "Amount."
          steps:
            - name: current
              type: call
              call: "oracle.get-alloc"
              with:
                cc: "{{source}}"
            - name: compute
              type: call
              call: "analytics.realloc"
              with:
                source: "{{source}}"
                target: "{{target}}"
                amount: "{{amount}}"
            - name: post
              type: call
              call: "oracle.post-journal"
              with:
                entries: "{{compute.entries}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#finance"
                text: "Reallocated ${{amount}} from {{source}} to {{target}}"
  consumes:
    - type: http
      namespace: oracle
      baseUri: "https://oracle.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: allocations
          path: "/cost-centers/{{cc}}/allocations"
          inputParameters:
            - name: cc
              in: path
          operations:
            - name: get-alloc
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://analytics.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: realloc
          path: "/compute"
          operations:
            - name: realloc
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Takes an approved creative brief from Jira, provisions an Adobe Creative Cloud project folder, uploads reference assets from SharePoint, and assigns the designer in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Creative Brief to Design Handoff"
  description: "Takes an approved creative brief from Jira, provisions an Adobe Creative Cloud project folder, uploads reference assets from SharePoint, and assigns the designer in Microsoft Teams."
  tags:
    - marketing
    - creative
    - jira
    - adobe-creative-cloud
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: creative-ops
      port: 8080
      tools:
        - name: handoff-creative-brief
          description: "Given a Jira issue key for the creative brief, set up the Adobe CC project, pull reference assets, and assign the designer."
          inputParameters:
            - name: jira_issue_key
              in: body
              type: string
              description: "The Jira issue key for the creative brief."
            - name: designer_email
              in: body
              type: string
              description: "The designer's email for assignment."
          steps:
            - name: get-brief
              type: call
              call: "jira.get-issue"
              with:
                issue_key: "{{jira_issue_key}}"
            - name: get-reference-assets
              type: call
              call: "sharepoint.search-files"
              with:
                keyword: "{{get-brief.summary}}"
                site_id: "brand-assets"
            - name: notify-designer
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{designer_email}}"
                text: "New creative brief assigned: {{get-brief.summary}}. Jira: {{jira_issue_key}}. Reference assets: {{get-reference-assets.count}} files found in SharePoint. Due: {{get-brief.due_date}}."
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://gap.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
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: search
          path: "/{{site_id}}/drive/root/search(q='{{keyword}}')"
          inputParameters:
            - name: site_id
              in: path
            - name: keyword
              in: path
          operations:
            - name: search-files
              method: GET
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Aggregates marketing metrics from Google Analytics, Adobe Analytics, Meta Ads, and MailChimp into a unified summary for weekly marketing review.

naftiko: "0.5"
info:
  label: "Cross-Channel Marketing Performance Dashboard"
  description: "Aggregates marketing metrics from Google Analytics, Adobe Analytics, Meta Ads, and MailChimp into a unified summary for weekly marketing review."
  tags:
    - marketing
    - analytics
    - google-analytics
    - adobe-analytics
    - meta
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: marketing-dashboard
      port: 8080
      tools:
        - name: generate-marketing-summary
          description: "Given a date range, pull metrics from all marketing channels and produce a unified performance summary."
          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."
          steps:
            - name: get-web-traffic
              type: call
              call: "google-analytics.run-report"
              with:
                start_date: "{{start_date}}"
                end_date: "{{end_date}}"
            - name: get-adobe-data
              type: call
              call: "adobe-analytics.get-report"
              with:
                start_date: "{{start_date}}"
                end_date: "{{end_date}}"
            - name: get-social-metrics
              type: call
              call: "meta.get-account-insights"
              with:
                since: "{{start_date}}"
                until: "{{end_date}}"
            - name: get-email-metrics
              type: call
              call: "mailchimp.get-summary"
              with:
                since_send_time: "{{start_date}}"
  consumes:
    - type: http
      namespace: google-analytics
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/properties/{{property_id}}:runReport"
          inputParameters:
            - name: property_id
              in: path
          operations:
            - name: run-report
              method: POST
    - type: http
      namespace: adobe-analytics
      baseUri: "https://analytics.adobe.io/api"
      authentication:
        type: bearer
        token: "$secrets.adobe_analytics_token"
      resources:
        - name: reports
          path: "/{{rsid}}/reports"
          inputParameters:
            - name: rsid
              in: path
          operations:
            - name: get-report
              method: POST
    - type: http
      namespace: meta
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.meta_ads_token"
      resources:
        - name: account-insights
          path: "/act_{{ad_account_id}}/insights"
          inputParameters:
            - name: ad_account_id
              in: path
          operations:
            - name: get-account-insights
              method: GET
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_api_key"
      resources:
        - name: campaign-summary
          path: "/campaigns"
          operations:
            - name: get-summary
              method: GET

Pulls new customer feedback from Salesforce cases, analyzes sentiment trends, logs product improvement suggestions in Jira, and sends a weekly digest to the product team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Customer Feedback to Product Insight Pipeline"
  description: "Pulls new customer feedback from Salesforce cases, analyzes sentiment trends, logs product improvement suggestions in Jira, and sends a weekly digest to the product team via Microsoft Teams."
  tags:
    - product-management
    - customer-feedback
    - salesforce
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: feedback-pipeline
      port: 8080
      tools:
        - name: process-feedback-digest
          description: "Given a date range, pull recent customer feedback cases from Salesforce, create Jira stories for actionable suggestions, and notify the product team."
          inputParameters:
            - name: start_date
              in: body
              type: string
              description: "Start date for feedback window in YYYY-MM-DD format."
            - name: end_date
              in: body
              type: string
              description: "End date for feedback window in YYYY-MM-DD format."
          steps:
            - name: get-feedback-cases
              type: call
              call: "salesforce.query-cases"
              with:
                query: "SELECT Id,Subject,Description,CreatedDate FROM Case WHERE Type='Feedback' AND CreatedDate>={{start_date}} AND CreatedDate<={{end_date}}"
            - name: create-jira-stories
              type: call
              call: "jira.create-issue"
              with:
                project: "PROD"
                summary: "Customer feedback digest: {{start_date}} to {{end_date}}"
                description: "{{get-feedback-cases.total_size}} feedback cases received. Top themes aggregated for product review."
                issue_type: "Story"
            - name: notify-product-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "product-team"
                channel_id: "customer-insights"
                text: "Weekly feedback digest ({{start_date}} to {{end_date}}): {{get-feedback-cases.total_size}} cases. Jira story: {{create-jira-stories.key}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://gap.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: query
          path: "/query"
          operations:
            - name: query-cases
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://gap.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When a Salesforce case is marked as escalated, retrieves customer details, creates a high-priority ServiceNow incident, and alerts the customer experience director via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Customer Service Escalation Pipeline"
  description: "When a Salesforce case is marked as escalated, retrieves customer details, creates a high-priority ServiceNow incident, and alerts the customer experience director via Microsoft Teams."
  tags:
    - customer-service
    - escalation
    - salesforce
    - servicenow
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: cs-escalation
      port: 8080
      tools:
        - name: escalate-case
          description: "Given a Salesforce case ID, pull case and customer details, create a ServiceNow incident, and alert the CX director."
          inputParameters:
            - name: case_id
              in: body
              type: string
              description: "The Salesforce case ID."
          steps:
            - name: get-case
              type: call
              call: "salesforce.get-case"
              with:
                case_id: "{{case_id}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Escalated customer case: {{get-case.CaseNumber}} — {{get-case.Subject}}"
                priority: "1"
                description: "Customer: {{get-case.ContactName}}. Original case: {{get-case.CaseNumber}}. Description: {{get-case.Description}}"
                assigned_group: "CX_Escalations"
            - name: alert-director
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "cx-director@gap.com"
                text: "ESCALATION: Case {{get-case.CaseNumber}} from {{get-case.ContactName}}. Subject: {{get-case.Subject}}. ServiceNow incident: {{create-incident.number}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://gap.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case/{{case_id}}"
          inputParameters:
            - name: case_id
              in: path
          operations:
            - name: get-case
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://gap.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Monitors data pipelines at Gap via Databricks, Snowflake, Slack, and ServiceNow.

naftiko: "0.5"
info:
  label: "Data Pipeline Monitor Pipeline"
  description: "Monitors data pipelines at Gap via Databricks, Snowflake, Slack, and ServiceNow."
  tags:
    - data-engineering
    - databricks
    - monitoring
    - slack
capability:
  exposes:
    - type: mcp
      namespace: pipeline-mon
      port: 8080
      tools:
        - name: monitor
          description: "Monitor pipelines at Gap."
          inputParameters:
            - name: pipeline_id
              in: body
              type: string
              description: "Pipeline ID."
          steps:
            - name: status
              type: call
              call: "databricks.get-run"
              with:
                id: "{{pipeline_id}}"
            - name: quality
              type: call
              call: "snowflake.query"
              with:
                query: "SELECT COUNT(*) FROM out WHERE p='{{pipeline_id}}'"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#data"
                text: "Pipeline {{pipeline_id}}: {{status.state}}"
            - name: incident
              type: call
              call: "servicenow.create-incident"
              with:
                desc: "Pipeline {{pipeline_id}} issue"
  consumes:
    - type: http
      namespace: databricks
      baseUri: "https://gap.com.cloud.databricks.com/api/2.1"
      authentication:
        type: bearer
        token: "$secrets.databricks_token"
      resources:
        - name: jobs
          path: "/jobs/runs/get"
          operations:
            - name: get-run
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://gap.com.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://gap.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Checks Datadog monitor at Gap.

naftiko: "0.5"
info:
  label: "Datadog Monitor Check"
  description: "Checks Datadog monitor at Gap."
  tags:
    - monitoring
    - datadog
    - observability
capability:
  exposes:
    - type: mcp
      namespace: dd-monitor
      port: 8080
      tools:
        - name: check-monitor
          description: "Check monitor at Gap."
          inputParameters:
            - name: monitor_id
              in: body
              type: string
              description: "Monitor ID."
          call: "datadog.get-monitor"
          with:
            monitor_id: "{{monitor_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.overall_state"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: monitors
          path: "/monitor/{{monitor_id}}"
          inputParameters:
            - name: monitor_id
              in: path
          operations:
            - name: get-monitor
              method: GET

Queries shipment status from Oracle Cloud logistics by tracking reference, returning carrier, estimated arrival, and current location for DC operations.

naftiko: "0.5"
info:
  label: "Distribution Center Shipment Tracker"
  description: "Queries shipment status from Oracle Cloud logistics by tracking reference, returning carrier, estimated arrival, and current location for DC operations."
  tags:
    - supply-chain
    - logistics
    - oracle-cloud
capability:
  exposes:
    - type: mcp
      namespace: dc-logistics
      port: 8080
      tools:
        - name: track-shipment
          description: "Look up a shipment by tracking reference in Oracle Cloud. Returns carrier, origin, destination, ETA, and current status."
          inputParameters:
            - name: tracking_ref
              in: body
              type: string
              description: "The shipment tracking reference number."
          call: "oracle-cloud.get-shipment"
          with:
            tracking_ref: "{{tracking_ref}}"
  consumes:
    - type: http
      namespace: oracle-cloud
      baseUri: "https://gap.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: shipments
          path: "/shipments?q=TrackingNumber={{tracking_ref}}"
          inputParameters:
            - name: tracking_ref
              in: query
          operations:
            - name: get-shipment
              method: GET

Tests disaster recovery at Gap via failover, health checks, and reporting.

naftiko: "0.5"
info:
  label: "DR Test Pipeline"
  description: "Tests disaster recovery at Gap via failover, health checks, and reporting."
  tags:
    - disaster-recovery
    - business-continuity
    - testing
capability:
  exposes:
    - type: mcp
      namespace: dr-test
      port: 8080
      tools:
        - name: test-dr
          description: "Test DR at Gap."
          inputParameters:
            - name: plan_id
              in: body
              type: string
              description: "Plan ID."
            - name: type
              in: body
              type: string
              description: "Test type."
          steps:
            - name: failover
              type: call
              call: "dr.failover"
              with:
                plan: "{{plan_id}}"
                type: "{{type}}"
            - name: validate
              type: call
              call: "monitoring.check"
              with:
                scope: "critical"
            - name: measure
              type: call
              call: "dr.metrics"
              with:
                id: "{{failover.id}}"
            - name: report
              type: call
              call: "confluence.create-page"
              with:
                title: "DR - {{plan_id}}"
                body: "RTO:{{measure.rto}}m RPO:{{measure.rpo}}m"
  consumes:
    - type: http
      namespace: dr
      baseUri: "https://dr.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.dr_token"
      resources:
        - name: failovers
          path: "/failovers"
          operations:
            - name: failover
              method: POST
    - type: http
      namespace: monitoring
      baseUri: "https://monitoring.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.monitoring_token"
      resources:
        - name: health
          path: "/checks"
          operations:
            - name: check
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://gap.com.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Detects infrastructure drift at Gap via Terraform, Slack, and Jira.

naftiko: "0.5"
info:
  label: "Drift Detection Pipeline"
  description: "Detects infrastructure drift at Gap via Terraform, Slack, and Jira."
  tags:
    - infrastructure
    - terraform
    - drift-detection
    - devops
capability:
  exposes:
    - type: mcp
      namespace: drift-det
      port: 8080
      tools:
        - name: detect
          description: "Detect drift at Gap."
          inputParameters:
            - name: ws_id
              in: body
              type: string
              description: "Workspace ID."
            - name: env
              in: body
              type: string
              description: "Environment."
          steps:
            - name: plan
              type: call
              call: "terraform.run"
              with:
                ws: "{{ws_id}}"
            - name: check
              type: call
              call: "terraform.get-plan"
              with:
                run: "{{plan.id}}"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#infra"
                text: "Drift {{env}}: {{check.changes}} changes"
            - name: ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "INFRA"
                summary: "Drift in {{env}}"
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: runs
          path: "/runs"
          operations:
            - name: run
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://gap.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST

When a customer initiates a return on Gap.com, retrieves the order from Oracle E-Business Suite, creates a return case in Salesforce, and sends a confirmation email via MailChimp transactional.

naftiko: "0.5"
info:
  label: "E-Commerce Returns and Exchanges Orchestrator"
  description: "When a customer initiates a return on Gap.com, retrieves the order from Oracle E-Business Suite, creates a return case in Salesforce, and sends a confirmation email via MailChimp transactional."
  tags:
    - e-commerce
    - returns
    - oracle-e-business-suite
    - salesforce
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: returns-processing
      port: 8080
      tools:
        - name: process-return
          description: "Given an order number and customer email, look up the original order, create a return case in Salesforce, and send the customer a return label email."
          inputParameters:
            - name: order_number
              in: body
              type: string
              description: "The original order number."
            - name: customer_email
              in: body
              type: string
              description: "The customer email for return confirmation."
            - name: reason
              in: body
              type: string
              description: "The reason for the return."
          steps:
            - name: get-order
              type: call
              call: "oracle-ebs.get-order"
              with:
                order_number: "{{order_number}}"
            - name: create-return-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "Return request: Order {{order_number}}"
                description: "Customer {{customer_email}} requested return for order {{order_number}}. Reason: {{reason}}. Order total: {{get-order.total_amount}}."
                type: "Return"
                priority: "Medium"
            - name: send-confirmation
              type: call
              call: "mailchimp.send-transactional"
              with:
                to_email: "{{customer_email}}"
                template: "return_confirmation"
                merge_vars:
                  order_number: "{{order_number}}"
                  case_number: "{{create-return-case.CaseNumber}}"
  consumes:
    - type: http
      namespace: oracle-ebs
      baseUri: "https://gap-ebs.oraclecloud.com/webservices/rest/oe/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: orders
          path: "/orders/{{order_number}}"
          inputParameters:
            - name: order_number
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://gap.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_api_key"
      resources:
        - name: transactional
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              method: POST

Checks ES index at Gap.

naftiko: "0.5"
info:
  label: "ES Index Health"
  description: "Checks ES index at Gap."
  tags:
    - search
    - elasticsearch
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: es-health
      port: 8080
      tools:
        - name: check-index
          description: "Check ES index at Gap."
          inputParameters:
            - name: index
              in: body
              type: string
              description: "Index name."
          call: "es.get-health"
          with:
            index: "{{index}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: docs
              type: number
              mapping: "$.docs.count"
  consumes:
    - type: http
      namespace: es
      baseUri: "https://es.gap.com:9200"
      authentication:
        type: bearer
        token: "$secrets.es_token"
      resources:
        - name: indices
          path: "/{{index}}/_stats"
          inputParameters:
            - name: index
              in: path
          operations:
            - name: get-health
              method: GET

Searches the Gap product catalog in Elasticsearch by keyword, returning matched products with name, price, category, and availability.

naftiko: "0.5"
info:
  label: "Elasticsearch Product Search"
  description: "Searches the Gap product catalog in Elasticsearch by keyword, returning matched products with name, price, category, and availability."
  tags:
    - e-commerce
    - search
    - elasticsearch
capability:
  exposes:
    - type: mcp
      namespace: product-search
      port: 8080
      tools:
        - name: search-products
          description: "Search the product catalog by keyword. Returns matching products with name, price, category, and stock status."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "Search keyword or phrase."
            - name: size
              in: body
              type: number
              description: "Maximum number of results to return."
          call: "elasticsearch.search"
          with:
            query: "{{query}}"
            size: "{{size}}"
  consumes:
    - type: http
      namespace: elasticsearch
      baseUri: "https://gap-es.internal:9200"
      authentication:
        type: basic
        username: "$secrets.elasticsearch_user"
        password: "$secrets.elasticsearch_password"
      resources:
        - name: product-index
          path: "/products/_search"
          operations:
            - name: search
              method: POST

When an employee role change is detected in PeopleSoft, assigns the appropriate Pluralsight learning path and notifies the employee and their manager via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Employee Learning Path Assignment"
  description: "When an employee role change is detected in PeopleSoft, assigns the appropriate Pluralsight learning path and notifies the employee and their manager via Microsoft Teams."
  tags:
    - hr
    - learning
    - peoplesoft
    - pluralsight
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: learning
      port: 8080
      tools:
        - name: assign-learning-path
          description: "Given an employee ID and new role, look up the employee, assign the Pluralsight path, and notify both employee and manager."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The PeopleSoft employee ID."
            - name: new_role
              in: body
              type: string
              description: "The new job role title."
            - name: learning_path_id
              in: body
              type: string
              description: "The Pluralsight learning path ID."
          steps:
            - name: get-employee
              type: call
              call: "peoplesoft.get-employee"
              with:
                employee_id: "{{employee_id}}"
            - name: assign-path
              type: call
              call: "pluralsight.assign-path"
              with:
                user_email: "{{get-employee.email}}"
                path_id: "{{learning_path_id}}"
            - name: notify-employee
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.email}}"
                text: "Congratulations on your new role as {{new_role}}! A Pluralsight learning path has been assigned to help you get started: {{assign-path.path_url}}."
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.manager_email}}"
                text: "{{get-employee.name}} has been assigned the {{new_role}} learning path in Pluralsight. Track progress: {{assign-path.path_url}}."
  consumes:
    - type: http
      namespace: peoplesoft
      baseUri: "https://gap-hrms.peoplesoft.com/PSIGW/RESTListeningConnector"
      authentication:
        type: basic
        username: "$secrets.peoplesoft_user"
        password: "$secrets.peoplesoft_password"
      resources:
        - name: employees
          path: "/EMPLOYEE_CI.v1/{{employee_id}}"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-employee
              method: GET
    - type: http
      namespace: pluralsight
      baseUri: "https://api.pluralsight.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.pluralsight_token"
      resources:
        - name: assignments
          path: "/learning-paths/{{path_id}}/assignments"
          inputParameters:
            - name: path_id
              in: path
          operations:
            - name: assign-path
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Offboards employees at Gap via Okta, Slack, ServiceNow, and storage.

naftiko: "0.5"
info:
  label: "Employee Offboarding Pipeline"
  description: "Offboards employees at Gap via Okta, Slack, ServiceNow, and storage."
  tags:
    - hr
    - offboarding
    - okta
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: offboarding
      port: 8080
      tools:
        - name: offboard
          description: "Offboard employees at Gap."
          inputParameters:
            - name: emp_id
              in: body
              type: string
              description: "Employee ID."
            - name: last_day
              in: body
              type: string
              description: "Last day."
          steps:
            - name: disable
              type: call
              call: "okta.deactivate"
              with:
                user: "{{emp_id}}"
            - name: revoke
              type: call
              call: "slack.remove"
              with:
                user: "{{emp_id}}"
            - name: return
              type: call
              call: "servicenow.create-request"
              with:
                type: "return"
                emp: "{{emp_id}}"
            - name: archive
              type: call
              call: "storage.archive"
              with:
                user: "{{emp_id}}"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://gap.com.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_api_token"
      resources:
        - name: users
          path: "/users/{{user}}/lifecycle/deactivate"
          inputParameters:
            - name: user
              in: path
          operations:
            - name: deactivate
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: users
          path: "/users.admin.remove"
          operations:
            - name: remove
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://gap.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
    - type: http
      namespace: storage
      baseUri: "https://storage.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.storage_token"
      resources:
        - name: archives
          path: "/archive"
          operations:
            - name: archive
              method: POST

Identifies end-of-season inventory in Oracle Cloud, applies clearance pricing, removes items from featured collections on BigCommerce, schedules a clearance email blast via MailChimp, and notifies store managers via Microsoft Teams.

naftiko: "0.5"
info:
  label: "End-of-Season Clearance Orchestrator"
  description: "Identifies end-of-season inventory in Oracle Cloud, applies clearance pricing, removes items from featured collections on BigCommerce, schedules a clearance email blast via MailChimp, and notifies store managers via Microsoft Teams."
  tags:
    - retail
    - clearance
    - oracle-cloud
    - bigcommerce
    - mailchimp
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: clearance-ops
      port: 8080
      tools:
        - name: execute-clearance
          description: "Given a season code and clearance discount, identify inventory, update pricing, adjust storefront, schedule email, and notify stores."
          inputParameters:
            - name: season_code
              in: body
              type: string
              description: "The season code (e.g. FW24, SS25)."
            - name: clearance_discount
              in: body
              type: number
              description: "Clearance discount percentage."
          steps:
            - name: get-seasonal-inventory
              type: call
              call: "oracle-cloud.get-inventory-by-season"
              with:
                season: "{{season_code}}"
            - name: apply-clearance-pricing
              type: call
              call: "oracle-cloud.update-price-list"
              with:
                items: "{{get-seasonal-inventory.items}}"
                markdown_pct: "{{clearance_discount}}"
            - name: update-storefront
              type: call
              call: "bigcommerce.update-products"
              with:
                items: "{{get-seasonal-inventory.skus}}"
                sale_price_adjustment: "{{clearance_discount}}"
            - name: schedule-email
              type: call
              call: "mailchimp.schedule-campaign"
              with:
                subject: "End of Season Clearance: Up to {{clearance_discount}}% Off!"
                segment: "all-subscribers"
            - name: notify-stores
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "store-managers"
                channel_id: "clearance"
                text: "Season {{season_code}} clearance initiated: {{clearance_discount}}% off on {{get-seasonal-inventory.item_count}} items. Pricing updated in Oracle and BigCommerce. Email blast scheduled."
  consumes:
    - type: http
      namespace: oracle-cloud
      baseUri: "https://gap.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: inventory-season
          path: "/inventoryBalances"
          operations:
            - name: get-inventory-by-season
              method: GET
        - name: price-lists
          path: "/priceLists"
          operations:
            - name: update-price-list
              method: PATCH
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/{{store_hash}}/v3"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      resources:
        - name: products
          path: "/catalog/products"
          operations:
            - name: update-products
              method: PUT
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_api_key"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: schedule-campaign
              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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Audits expenses at Gap via Concur, compliance checks, and email.

naftiko: "0.5"
info:
  label: "Expense Audit Pipeline"
  description: "Audits expenses at Gap via Concur, compliance checks, and email."
  tags:
    - finance
    - travel
    - sap-concur
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: expense-audit
      port: 8080
      tools:
        - name: audit
          description: "Audit expenses at Gap."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "Report ID."
          steps:
            - name: get
              type: call
              call: "concur.get-report"
              with:
                id: "{{report_id}}"
            - name: check
              type: call
              call: "compliance.check"
              with:
                expenses: "{{get.entries}}"
            - name: flag
              type: call
              call: "workflow.flag"
              with:
                id: "{{report_id}}"
                violations: "{{check.violations}}"
            - name: notify
              type: call
              call: "email.send"
              with:
                to: "{{get.approver}}"
                subject: "Expense {{report_id}} violations"
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://us.api.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: reports
          path: "/expense/reports/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-report
              method: GET
    - type: http
      namespace: compliance
      baseUri: "https://compliance.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.compliance_token"
      resources:
        - name: policies
          path: "/check"
          operations:
            - name: check
              method: POST
    - type: http
      namespace: workflow
      baseUri: "https://workflow.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workflow_token"
      resources:
        - name: reviews
          path: "/flag"
          operations:
            - name: flag
              method: POST
    - type: http
      namespace: email
      baseUri: "https://email.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST

Checks F5 load balancer pool member health for Gap e-commerce web servers, returning node status, active connections, and availability.

naftiko: "0.5"
info:
  label: "F5 Load Balancer Health"
  description: "Checks F5 load balancer pool member health for Gap e-commerce web servers, returning node status, active connections, and availability."
  tags:
    - infrastructure
    - load-balancing
    - f5-networks
capability:
  exposes:
    - type: mcp
      namespace: lb-ops
      port: 8080
      tools:
        - name: get-pool-health
          description: "Given an F5 pool name, return the health status of all pool members including active connections and availability."
          inputParameters:
            - name: pool_name
              in: body
              type: string
              description: "The F5 pool name."
          call: "f5.get-pool-members"
          with:
            pool_name: "{{pool_name}}"
  consumes:
    - type: http
      namespace: f5
      baseUri: "https://gap-f5.internal/mgmt/tm/ltm"
      authentication:
        type: basic
        username: "$secrets.f5_user"
        password: "$secrets.f5_password"
      resources:
        - name: pool-members
          path: "/pool/~Common~{{pool_name}}/members"
          inputParameters:
            - name: pool_name
              in: path
          operations:
            - name: get-pool-members
              method: GET

Analyzes feedback at Gap via surveys, AI sentiment, and Power BI.

naftiko: "0.5"
info:
  label: "Customer Feedback Pipeline"
  description: "Analyzes feedback at Gap via surveys, AI sentiment, and Power BI."
  tags:
    - customer-experience
    - analytics
    - sentiment-analysis
capability:
  exposes:
    - type: mcp
      namespace: feedback
      port: 8080
      tools:
        - name: analyze
          description: "Analyze feedback at Gap."
          inputParameters:
            - name: survey_id
              in: body
              type: string
              description: "Survey ID."
          steps:
            - name: collect
              type: call
              call: "survey.get"
              with:
                id: "{{survey_id}}"
            - name: sentiment
              type: call
              call: "ai.analyze"
              with:
                text: "{{collect.responses}}"
            - name: themes
              type: call
              call: "ai.themes"
              with:
                data: "{{collect.responses}}"
            - name: dashboard
              type: call
              call: "power-bi.refresh"
              with:
                dataset: "cx"
  consumes:
    - type: http
      namespace: survey
      baseUri: "https://surveys.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.survey_token"
      resources:
        - name: responses
          path: "/surveys/{{id}}/responses"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get
              method: GET
    - type: http
      namespace: ai
      baseUri: "https://api.openai.com/v1"
      authentication:
        type: bearer
        token: "$secrets.openai_api_key"
      resources:
        - name: completions
          path: "/chat/completions"
          operations:
            - name: analyze
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset}}/refreshes"
          inputParameters:
            - name: dataset
              in: path
          operations:
            - name: refresh
              method: POST

Looks up a Gap gift card balance from Oracle E-Business Suite by card number and returns current balance, expiry date, and last transaction.

naftiko: "0.5"
info:
  label: "Gift Card Balance Check"
  description: "Looks up a Gap gift card balance from Oracle E-Business Suite by card number and returns current balance, expiry date, and last transaction."
  tags:
    - retail
    - gift-cards
    - oracle-e-business-suite
capability:
  exposes:
    - type: mcp
      namespace: gift-cards
      port: 8080
      tools:
        - name: check-gift-card-balance
          description: "Given a gift card number, return the current balance, expiry date, and last transaction details."
          inputParameters:
            - name: card_number
              in: body
              type: string
              description: "The gift card number."
          call: "oracle-ebs.get-gift-card"
          with:
            card_number: "{{card_number}}"
  consumes:
    - type: http
      namespace: oracle-ebs
      baseUri: "https://gap-ebs.oraclecloud.com/webservices/rest/gc/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: gift-cards
          path: "/giftCards/{{card_number}}"
          inputParameters:
            - name: card_number
              in: path
          operations:
            - name: get-gift-card
              method: GET

Checks GitHub repo at Gap.

naftiko: "0.5"
info:
  label: "GitHub Repo Check"
  description: "Checks GitHub repo at Gap."
  tags:
    - devops
    - github
    - version-control
capability:
  exposes:
    - type: mcp
      namespace: gh-repo
      port: 8080
      tools:
        - name: get-branch
          description: "Check branch at Gap."
          inputParameters:
            - name: repo
              in: body
              type: string
              description: "Repo."
            - name: branch
              in: body
              type: string
              description: "Branch."
          call: "github.get-branch"
          with:
            repo: "{{repo}}"
            branch: "{{branch}}"
          outputParameters:
            - name: sha
              type: string
              mapping: "$.commit.sha"
  consumes:
    - type: http
      namespace: github
      baseUri: "https://api.github.com"
      authentication:
        type: bearer
        token: "$secrets.github_token"
      resources:
        - name: branches
          path: "/repos/org/{{repo}}/branches/{{branch}}"
          inputParameters:
            - name: repo
              in: path
            - name: branch
              in: path
          operations:
            - name: get-branch
              method: GET

Retrieves the latest GitLab CI/CD pipeline status for a given project, returning pipeline state, duration, and deployment environment.

naftiko: "0.5"
info:
  label: "GitLab Deployment Status"
  description: "Retrieves the latest GitLab CI/CD pipeline status for a given project, returning pipeline state, duration, and deployment environment."
  tags:
    - engineering
    - cicd
    - gitlab
capability:
  exposes:
    - type: mcp
      namespace: cicd
      port: 8080
      tools:
        - name: get-pipeline-status
          description: "Look up the latest GitLab pipeline for a project. Returns status, duration, stages, and deployed environment."
          inputParameters:
            - name: project_id
              in: body
              type: string
              description: "The GitLab project ID."
          call: "gitlab.get-latest-pipeline"
          with:
            project_id: "{{project_id}}"
  consumes:
    - type: http
      namespace: gitlab
      baseUri: "https://gitlab.gap.com/api/v4"
      authentication:
        type: bearer
        token: "$secrets.gitlab_token"
      resources:
        - name: pipelines
          path: "/projects/{{project_id}}/pipelines/latest"
          inputParameters:
            - name: project_id
              in: path
          operations:
            - name: get-latest-pipeline
              method: GET

Pulls daily web traffic metrics from Google Analytics for Gap.com including sessions, conversion rate, and revenue summary.

naftiko: "0.5"
info:
  label: "Google Analytics Storefront Report"
  description: "Pulls daily web traffic metrics from Google Analytics for Gap.com including sessions, conversion rate, and revenue summary."
  tags:
    - e-commerce
    - analytics
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: web-analytics
      port: 8080
      tools:
        - name: get-daily-traffic
          description: "Retrieve daily traffic summary from Google Analytics for a given date range. Returns sessions, bounce rate, conversion rate, and revenue."
          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: "google-analytics.run-report"
          with:
            start_date: "{{start_date}}"
            end_date: "{{end_date}}"
  consumes:
    - type: http
      namespace: google-analytics
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/properties/{{property_id}}:runReport"
          inputParameters:
            - name: property_id
              in: path
          operations:
            - name: run-report
              method: POST

Checks Grafana dashboard at Gap.

naftiko: "0.5"
info:
  label: "Grafana Dashboard Status"
  description: "Checks Grafana dashboard at Gap."
  tags:
    - monitoring
    - grafana
    - dashboards
capability:
  exposes:
    - type: mcp
      namespace: grafana
      port: 8080
      tools:
        - name: check-dash
          description: "Check dashboard at Gap."
          inputParameters:
            - name: uid
              in: body
              type: string
              description: "Dashboard UID."
          call: "grafana.get-dash"
          with:
            uid: "{{uid}}"
          outputParameters:
            - name: title
              type: string
              mapping: "$.dashboard.title"
  consumes:
    - type: http
      namespace: grafana
      baseUri: "https://grafana.gap.com/api"
      authentication:
        type: bearer
        token: "$secrets.grafana_token"
      resources:
        - name: dashboards
          path: "/dashboards/uid/{{uid}}"
          inputParameters:
            - name: uid
              in: path
          operations:
            - name: get-dash
              method: GET

Fetches recent Instagram ad campaign metrics from Meta for Gap brand accounts including impressions, reach, engagement, and spend.

naftiko: "0.5"
info:
  label: "Instagram Campaign Performance"
  description: "Fetches recent Instagram ad campaign metrics from Meta for Gap brand accounts including impressions, reach, engagement, and spend."
  tags:
    - marketing
    - social-media
    - instagram
    - meta
capability:
  exposes:
    - type: mcp
      namespace: social-marketing
      port: 8080
      tools:
        - name: get-instagram-campaign
          description: "Given a campaign ID, retrieve impressions, reach, engagement rate, and total spend from Meta Ads API."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The Meta Ads campaign ID."
          call: "meta.get-campaign-insights"
          with:
            campaign_id: "{{campaign_id}}"
  consumes:
    - type: http
      namespace: meta
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.meta_ads_token"
      resources:
        - name: campaign-insights
          path: "/{{campaign_id}}/insights"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: get-campaign-insights
              method: GET

Escalates IT incidents at Gap via ServiceNow, PagerDuty, and Slack.

naftiko: "0.5"
info:
  label: "IT Incident Escalation Pipeline"
  description: "Escalates IT incidents at Gap via ServiceNow, PagerDuty, and Slack."
  tags:
    - incident-management
    - servicenow
    - pagerduty
    - slack
capability:
  exposes:
    - type: mcp
      namespace: incident-escalation
      port: 8080
      tools:
        - name: escalate-incident
          description: "Escalate incidents at Gap."
          inputParameters:
            - name: incident_id
              in: body
              type: string
              description: "Incident ID."
            - name: severity
              in: body
              type: string
              description: "Severity."
          steps:
            - name: get-incident
              type: call
              call: "servicenow.get-incident"
              with:
                incident_id: "{{incident_id}}"
            - name: page
              type: call
              call: "pagerduty.create-incident"
              with:
                title: "{{get-incident.description}}"
                urgency: "{{severity}}"
            - name: channel
              type: call
              call: "slack.create-channel"
              with:
                name: "inc-{{incident_id}}"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#inc-{{incident_id}}"
                text: "P{{severity}}: {{get-incident.description}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://gap.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/table/incident/{{incident_id}}"
          inputParameters:
            - name: incident_id
              in: path
          operations:
            - name: get-incident
              method: GET
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: create-incident
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: channels
          path: "/conversations.create"
          operations:
            - name: create-channel
              method: POST

Retrieves sprint progress at Gap.

naftiko: "0.5"
info:
  label: "Jira Sprint Progress Lookup"
  description: "Retrieves sprint progress at Gap."
  tags:
    - project-management
    - jira
    - agile
capability:
  exposes:
    - type: mcp
      namespace: jira-sprint
      port: 8080
      tools:
        - name: get-sprint
          description: "Look up sprint at Gap."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "Project key."
          call: "jira.get-sprints"
          with:
            project: "{{project_key}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.values[0].name"
            - name: state
              type: string
              mapping: "$.values[0].state"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://gap.com.atlassian.net/rest/agile/1.0"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: sprints
          path: "/board/1/sprint"
          operations:
            - name: get-sprints
              method: GET

Retrieves sprint progress metrics from Jira including total stories, completed, in-progress, and remaining story points for engineering standup reports.

naftiko: "0.5"
info:
  label: "Jira Sprint Progress Report"
  description: "Retrieves sprint progress metrics from Jira including total stories, completed, in-progress, and remaining story points for engineering standup reports."
  tags:
    - engineering
    - project-management
    - jira
capability:
  exposes:
    - type: mcp
      namespace: eng-reporting
      port: 8080
      tools:
        - name: get-sprint-progress
          description: "Given a Jira board ID and sprint ID, return total stories, completed count, in-progress count, and remaining story points."
          inputParameters:
            - name: board_id
              in: body
              type: string
              description: "The Jira board ID."
            - name: sprint_id
              in: body
              type: string
              description: "The Jira sprint ID."
          call: "jira.get-sprint"
          with:
            board_id: "{{board_id}}"
            sprint_id: "{{sprint_id}}"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://gap.atlassian.net/rest/agile/1.0"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: sprints
          path: "/board/{{board_id}}/sprint/{{sprint_id}}"
          inputParameters:
            - name: board_id
              in: path
            - name: sprint_id
              in: path
          operations:
            - name: get-sprint
              method: GET

Maintains KB at Gap by finding stale articles and notifying owners.

naftiko: "0.5"
info:
  label: "Knowledge Base Maintenance Pipeline"
  description: "Maintains KB at Gap by finding stale articles and notifying owners."
  tags:
    - knowledge-management
    - confluence
    - maintenance
capability:
  exposes:
    - type: mcp
      namespace: kb-maint
      port: 8080
      tools:
        - name: maintain-kb
          description: "Maintain KB at Gap."
          inputParameters:
            - name: space
              in: body
              type: string
              description: "Confluence space."
            - name: stale_days
              in: body
              type: number
              description: "Days threshold."
          steps:
            - name: find
              type: call
              call: "confluence.search-stale"
              with:
                space: "{{space}}"
                days: "{{stale_days}}"
            - name: notify
              type: call
              call: "email.batch"
              with:
                to: "{{find.owners}}"
                subject: "KB review needed"
            - name: flag
              type: call
              call: "confluence.add-label"
              with:
                pages: "{{find.ids}}"
                label: "needs-review"
            - name: report
              type: call
              call: "slack.post-message"
              with:
                channel: "#kb"
                text: "KB: {{find.count}} stale articles"
  consumes:
    - type: http
      namespace: confluence
      baseUri: "https://gap.com.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: content
          path: "/content/search"
          operations:
            - name: search-stale
              method: GET
    - type: http
      namespace: email
      baseUri: "https://email.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: batch
          path: "/send-batch"
          operations:
            - name: batch
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Generates KPI digest at Gap from Snowflake, Oracle, Power BI, and email.

naftiko: "0.5"
info:
  label: "Weekly KPI Digest Pipeline"
  description: "Generates KPI digest at Gap from Snowflake, Oracle, Power BI, and email."
  tags:
    - reporting
    - kpi
    - snowflake
    - executive
capability:
  exposes:
    - type: mcp
      namespace: kpi-digest
      port: 8080
      tools:
        - name: gen-digest
          description: "Generate KPI digest at Gap."
          inputParameters:
            - name: week
              in: body
              type: string
              description: "Week ending."
            - name: dist
              in: body
              type: string
              description: "Distribution list."
          steps:
            - name: ops
              type: call
              call: "snowflake.query"
              with:
                query: "SELECT * FROM kpis WHERE w='{{week}}'"
            - name: fin
              type: call
              call: "oracle.get-summary"
              with:
                period: "{{week}}"
            - name: refresh
              type: call
              call: "power-bi.refresh"
              with:
                dataset: "exec_kpis"
            - name: send
              type: call
              call: "email.send"
              with:
                to: "{{dist}}"
                subject: "KPIs - {{week}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://gap.com.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query
              method: POST
    - type: http
      namespace: oracle
      baseUri: "https://oracle.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: fin
          path: "/summary"
          operations:
            - name: get-summary
              method: GET
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset}}/refreshes"
          inputParameters:
            - name: dataset
              in: path
          operations:
            - name: refresh
              method: POST
    - type: http
      namespace: email
      baseUri: "https://email.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST

Checks K8s pod health at Gap.

naftiko: "0.5"
info:
  label: "K8s Pod Health"
  description: "Checks K8s pod health at Gap."
  tags:
    - containers
    - kubernetes
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: k8s-pod
      port: 8080
      tools:
        - name: check-pod
          description: "Check pod at Gap."
          inputParameters:
            - name: namespace
              in: body
              type: string
              description: "Namespace."
            - name: pod
              in: body
              type: string
              description: "Pod name."
          call: "k8s.get-pod"
          with:
            namespace: "{{namespace}}"
            pod: "{{pod}}"
          outputParameters:
            - name: phase
              type: string
              mapping: "$.status.phase"
  consumes:
    - type: http
      namespace: k8s
      baseUri: "https://k8s.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.k8s_token"
      resources:
        - name: pods
          path: "/namespaces/{{namespace}}/pods/{{pod}}"
          inputParameters:
            - name: namespace
              in: path
            - name: pod
              in: path
          operations:
            - name: get-pod
              method: GET

Checks license compliance at Gap via scanning, entitlements, and procurement.

naftiko: "0.5"
info:
  label: "License Compliance Pipeline"
  description: "Checks license compliance at Gap via scanning, entitlements, and procurement."
  tags:
    - compliance
    - licensing
    - procurement
capability:
  exposes:
    - type: mcp
      namespace: license-comp
      port: 8080
      tools:
        - name: check-licenses
          description: "Check license compliance at Gap."
          inputParameters:
            - name: software
              in: body
              type: string
              description: "Software."
            - name: vendor
              in: body
              type: string
              description: "Vendor."
          steps:
            - name: scan
              type: call
              call: "assets.installations"
              with:
                sw: "{{software}}"
            - name: entitlements
              type: call
              call: "licenses.get"
              with:
                sw: "{{software}}"
            - name: flag
              type: call
              call: "compliance.flag"
              with:
                installed: "{{scan.count}}"
                entitled: "{{entitlements.count}}"
            - name: procure
              type: call
              call: "servicenow.create-request"
              with:
                type: "license"
                sw: "{{software}}"
  consumes:
    - type: http
      namespace: assets
      baseUri: "https://assets.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.asset_token"
      resources:
        - name: installations
          path: "/installations"
          operations:
            - name: installations
              method: GET
    - type: http
      namespace: licenses
      baseUri: "https://licenses.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.license_token"
      resources:
        - name: ent
          path: "/entitlements"
          operations:
            - name: get
              method: GET
    - type: http
      namespace: compliance
      baseUri: "https://compliance.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.compliance_token"
      resources:
        - name: overages
          path: "/flag"
          operations:
            - name: flag
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://gap.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST

Retrieves the status of a LinkedIn job posting for Gap Inc. including view count, applicant count, and days remaining.

naftiko: "0.5"
info:
  label: "LinkedIn Job Posting Status"
  description: "Retrieves the status of a LinkedIn job posting for Gap Inc. including view count, applicant count, and days remaining."
  tags:
    - recruiting
    - linkedin
capability:
  exposes:
    - type: mcp
      namespace: recruiting
      port: 8080
      tools:
        - name: get-job-posting-status
          description: "Look up a LinkedIn job posting by job ID. Returns status, views, applicants, and expiry date."
          inputParameters:
            - name: job_id
              in: body
              type: string
              description: "The LinkedIn job posting ID."
          call: "linkedin.get-job"
          with:
            job_id: "{{job_id}}"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: jobs
          path: "/jobs/{{job_id}}"
          inputParameters:
            - name: job_id
              in: path
          operations:
            - name: get-job
              method: GET

When a customer reaches a new loyalty tier, updates the tier in Salesforce, sends a congratulatory email via MailChimp, and posts an internal notification to Microsoft Teams for the CRM team.

naftiko: "0.5"
info:
  label: "Loyalty Program Tier Update Orchestrator"
  description: "When a customer reaches a new loyalty tier, updates the tier in Salesforce, sends a congratulatory email via MailChimp, and posts an internal notification to Microsoft Teams for the CRM team."
  tags:
    - customer-service
    - loyalty
    - salesforce
    - mailchimp
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: loyalty
      port: 8080
      tools:
        - name: update-loyalty-tier
          description: "Given a customer ID and new tier, update Salesforce, email the customer, and notify the CRM team."
          inputParameters:
            - name: customer_id
              in: body
              type: string
              description: "The Salesforce contact ID."
            - name: new_tier
              in: body
              type: string
              description: "The new loyalty tier name."
            - name: customer_email
              in: body
              type: string
              description: "The customer email address."
          steps:
            - name: update-salesforce
              type: call
              call: "salesforce.update-contact"
              with:
                contact_id: "{{customer_id}}"
                loyalty_tier: "{{new_tier}}"
            - name: send-congrats
              type: call
              call: "mailchimp.send-transactional"
              with:
                to_email: "{{customer_email}}"
                template: "loyalty_tier_upgrade"
                merge_vars:
                  new_tier: "{{new_tier}}"
            - name: notify-crm-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "crm-team"
                channel_id: "loyalty-updates"
                text: "Customer {{customer_id}} upgraded to {{new_tier}} tier."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://gap.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact/{{contact_id}}"
          inputParameters:
            - name: contact_id
              in: path
          operations:
            - name: update-contact
              method: PATCH
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_api_key"
      resources:
        - name: transactional
          path: "/messages/send-template"
          operations:
            - name: send-transactional
              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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Retrieves performance metrics for a MailChimp email campaign including open rate, click rate, unsubscribes, and total recipients.

naftiko: "0.5"
info:
  label: "MailChimp Email Campaign Metrics"
  description: "Retrieves performance metrics for a MailChimp email campaign including open rate, click rate, unsubscribes, and total recipients."
  tags:
    - marketing
    - email
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: email-marketing
      port: 8080
      tools:
        - name: get-campaign-metrics
          description: "Given a MailChimp campaign ID, return open rate, click rate, bounce rate, and total recipients."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The MailChimp campaign ID."
          call: "mailchimp.get-campaign-report"
          with:
            campaign_id: "{{campaign_id}}"
  consumes:
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_api_key"
      resources:
        - name: reports
          path: "/reports/{{campaign_id}}"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: get-campaign-report
              method: GET

Analyzes slow-moving inventory from Oracle Cloud, cross-references sell-through rates from Google Analytics, recommends markdown pricing, and updates the Oracle price list and notifies merchandising via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Markdown Optimization Orchestrator"
  description: "Analyzes slow-moving inventory from Oracle Cloud, cross-references sell-through rates from Google Analytics, recommends markdown pricing, and updates the Oracle price list and notifies merchandising via Microsoft Teams."
  tags:
    - retail
    - merchandising
    - oracle-cloud
    - google-analytics
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: markdown-optimization
      port: 8080
      tools:
        - name: optimize-markdowns
          description: "Given a product category and slow-mover threshold, identify candidates for markdown, recommend new prices, update Oracle, and notify the team."
          inputParameters:
            - name: category
              in: body
              type: string
              description: "Product category to analyze."
            - name: sell_through_threshold
              in: body
              type: number
              description: "Minimum sell-through rate threshold (e.g. 0.3 for 30%)."
          steps:
            - name: get-slow-movers
              type: call
              call: "oracle-cloud.get-inventory-aging"
              with:
                category: "{{category}}"
                threshold: "{{sell_through_threshold}}"
            - name: get-web-performance
              type: call
              call: "google-analytics.run-report"
              with:
                dimension: "productCategory"
                filter: "{{category}}"
            - name: update-prices
              type: call
              call: "oracle-cloud.update-price-list"
              with:
                items: "{{get-slow-movers.items}}"
                markdown_pct: "30"
            - name: notify-merch
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "merchandising"
                channel_id: "markdowns"
                text: "Markdown applied to {{get-slow-movers.item_count}} items in {{category}}. Avg sell-through was {{get-slow-movers.avg_sell_through}}%. Web conversion for category: {{get-web-performance.conversion_rate}}%."
  consumes:
    - type: http
      namespace: oracle-cloud
      baseUri: "https://gap.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: inventory-aging
          path: "/inventoryAging"
          operations:
            - name: get-inventory-aging
              method: GET
        - name: price-lists
          path: "/priceLists"
          operations:
            - name: update-price-list
              method: PATCH
    - type: http
      namespace: google-analytics
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/properties/{{property_id}}:runReport"
          inputParameters:
            - name: property_id
              in: path
          operations:
            - name: run-report
              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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Checks the status of a Mastercard payment transaction by reference ID, returning authorization status, amount, and settlement date.

naftiko: "0.5"
info:
  label: "Mastercard Payment Gateway Status"
  description: "Checks the status of a Mastercard payment transaction by reference ID, returning authorization status, amount, and settlement date."
  tags:
    - payments
    - mastercard
capability:
  exposes:
    - type: mcp
      namespace: payments
      port: 8080
      tools:
        - name: get-payment-status
          description: "Look up a Mastercard transaction by reference ID. Returns authorization status, amount, currency, and settlement date."
          inputParameters:
            - name: reference_id
              in: body
              type: string
              description: "The Mastercard transaction reference ID."
          call: "mastercard.get-transaction"
          with:
            reference_id: "{{reference_id}}"
  consumes:
    - type: http
      namespace: mastercard
      baseUri: "https://api.mastercard.com/gateway/v1"
      authentication:
        type: bearer
        token: "$secrets.mastercard_token"
      resources:
        - name: transactions
          path: "/transactions/{{reference_id}}"
          inputParameters:
            - name: reference_id
              in: path
          operations:
            - name: get-transaction
              method: GET

Invokes an Azure Function for serverless processing tasks like image resizing, data transformation, or batch calculations for Gap digital operations.

naftiko: "0.5"
info:
  label: "Microsoft Azure Function Invocation"
  description: "Invokes an Azure Function for serverless processing tasks like image resizing, data transformation, or batch calculations for Gap digital operations."
  tags:
    - infrastructure
    - serverless
    - azure-functions
capability:
  exposes:
    - type: mcp
      namespace: serverless
      port: 8080
      tools:
        - name: invoke-function
          description: "Invoke an Azure Function by name with a JSON payload."
          inputParameters:
            - name: function_name
              in: body
              type: string
              description: "The Azure Function name."
            - name: payload
              in: body
              type: string
              description: "JSON payload for the function."
          call: "azure-functions.invoke"
          with:
            function_name: "{{function_name}}"
            body: "{{payload}}"
  consumes:
    - type: http
      namespace: azure-functions
      baseUri: "https://gap-functions.azurewebsites.net/api"
      authentication:
        type: apiKey
        name: "x-functions-key"
        in: header
        value: "$secrets.azure_functions_key"
      resources:
        - name: functions
          path: "/{{function_name}}"
          inputParameters:
            - name: function_name
              in: path
          operations:
            - name: invoke
              method: POST

Sends a formatted notification message to a specified Microsoft Teams channel for operational alerts, promotions updates, or system announcements.

naftiko: "0.5"
info:
  label: "Microsoft Teams Channel Notification"
  description: "Sends a formatted notification message to a specified Microsoft Teams channel for operational alerts, promotions updates, or system announcements."
  tags:
    - communications
    - notifications
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: team-notifications
      port: 8080
      tools:
        - name: send-channel-notification
          description: "Post a message to a Microsoft Teams channel by team and channel name."
          inputParameters:
            - name: team_id
              in: body
              type: string
              description: "The Microsoft Teams team ID."
            - name: channel_id
              in: body
              type: string
              description: "The Microsoft Teams channel ID."
            - name: message_text
              in: body
              type: string
              description: "The notification message body."
          call: "msteams.post-channel-message"
          with:
            team_id: "{{team_id}}"
            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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Generates monthly security reports at Gap from Splunk and Qualys.

naftiko: "0.5"
info:
  label: "Monthly Security Report Pipeline"
  description: "Generates monthly security reports at Gap from Splunk and Qualys."
  tags:
    - security
    - reporting
    - splunk
    - compliance
capability:
  exposes:
    - type: mcp
      namespace: sec-report
      port: 8080
      tools:
        - name: gen-sec-report
          description: "Generate security report at Gap."
          inputParameters:
            - name: month
              in: body
              type: string
              description: "Month."
          steps:
            - name: splunk
              type: call
              call: "splunk.search"
              with:
                query: "index=security earliest=-30d"
            - name: scans
              type: call
              call: "qualys.results"
              with:
                month: "{{month}}"
            - name: compile
              type: call
              call: "analytics.compile-security"
              with:
                events: "{{splunk.count}}"
                vulns: "{{scans.critical}}"
            - name: send
              type: call
              call: "email.send"
              with:
                to: "ciso@co.com"
                subject: "Security - {{month}}"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://splunk.gap.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search
          path: "/search/jobs"
          operations:
            - name: search
              method: POST
    - type: http
      namespace: qualys
      baseUri: "https://qualysapi.qualys.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.qualys_token"
      resources:
        - name: results
          path: "/fo/scan/results"
          operations:
            - name: results
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://analytics.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: security
          path: "/compile"
          operations:
            - name: compile-security
              method: POST
    - type: http
      namespace: email
      baseUri: "https://email.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST

Retrieves a financial journal entry from Navision by document number, returning posting date, account, amount, and description.

naftiko: "0.5"
info:
  label: "Navision Financial Journal Entry"
  description: "Retrieves a financial journal entry from Navision by document number, returning posting date, account, amount, and description."
  tags:
    - finance
    - erp
    - navision
capability:
  exposes:
    - type: mcp
      namespace: finance-erp
      port: 8080
      tools:
        - name: get-journal-entry
          description: "Look up a Navision journal entry by document number."
          inputParameters:
            - name: document_number
              in: body
              type: string
              description: "The Navision document number."
          call: "navision.get-entry"
          with:
            document_number: "{{document_number}}"
  consumes:
    - type: http
      namespace: navision
      baseUri: "https://gap-nav.dynamics.com/api/v2.0"
      authentication:
        type: bearer
        token: "$secrets.navision_token"
      resources:
        - name: journal-entries
          path: "/generalJournalEntries?$filter=documentNumber eq '{{document_number}}'"
          inputParameters:
            - name: document_number
              in: query
          operations:
            - name: get-entry
              method: GET

Onboards employees at Gap with Okta, ServiceNow, Slack, and calendar.

naftiko: "0.5"
info:
  label: "New Employee IT Onboarding Pipeline"
  description: "Onboards employees at Gap with Okta, ServiceNow, Slack, and calendar."
  tags:
    - hr
    - onboarding
    - okta
    - servicenow
    - slack
capability:
  exposes:
    - type: mcp
      namespace: it-onboarding
      port: 8080
      tools:
        - name: onboard-employee
          description: "Onboard employees at Gap."
          inputParameters:
            - name: name
              in: body
              type: string
              description: "Name."
            - name: dept
              in: body
              type: string
              description: "Department."
            - name: start
              in: body
              type: string
              description: "Start date."
          steps:
            - name: okta
              type: call
              call: "okta.create-user"
              with:
                name: "{{name}}"
                department: "{{dept}}"
            - name: equip
              type: call
              call: "servicenow.create-request"
              with:
                type: "new_hire"
                for: "{{name}}"
            - name: slack
              type: call
              call: "slack.invite"
              with:
                email: "{{okta.email}}"
            - name: orient
              type: call
              call: "calendar.create-event"
              with:
                title: "Orientation - {{name}}"
                date: "{{start}}"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://gap.com.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_api_token"
      resources:
        - name: users
          path: "/users"
          operations:
            - name: create-user
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://gap.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: users
          path: "/users.admin.invite"
          operations:
            - name: invite
              method: POST
    - type: http
      namespace: calendar
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.microsoft_graph_token"
      resources:
        - name: events
          path: "/users/hr/events"
          operations:
            - name: create-event
              method: POST

Checks New Relic APM at Gap.

naftiko: "0.5"
info:
  label: "New Relic APM Check"
  description: "Checks New Relic APM at Gap."
  tags:
    - monitoring
    - new-relic
    - apm
capability:
  exposes:
    - type: mcp
      namespace: nr-apm
      port: 8080
      tools:
        - name: check-apm
          description: "Check APM at Gap."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "App ID."
          call: "newrelic.get-app"
          with:
            app_id: "{{app_id}}"
          outputParameters:
            - name: health
              type: string
              mapping: "$.application.health_status"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: bearer
        token: "$secrets.new_relic_api_key"
      resources:
        - name: applications
          path: "/applications/{{app_id}}.json"
          inputParameters:
            - name: app_id
              in: path
          operations:
            - name: get-app
              method: GET

Checks Okta user at Gap.

naftiko: "0.5"
info:
  label: "Okta User Check"
  description: "Checks Okta user at Gap."
  tags:
    - identity
    - okta
    - access-management
capability:
  exposes:
    - type: mcp
      namespace: okta-user
      port: 8080
      tools:
        - name: check-user
          description: "Check user at Gap."
          inputParameters:
            - name: email
              in: body
              type: string
              description: "Email."
          call: "okta.get-user"
          with:
            email: "{{email}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
  consumes:
    - type: http
      namespace: okta
      baseUri: "https://gap.com.okta.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.okta_api_token"
      resources:
        - name: users
          path: "/users/{{email}}"
          inputParameters:
            - name: email
              in: path
          operations:
            - name: get-user
              method: GET

Retrieves an order by ID from Oracle E-Business Suite and returns shipment status, estimated delivery, and line-item details for store associates and customer service agents.

naftiko: "0.5"
info:
  label: "Omnichannel Order Status Lookup"
  description: "Retrieves an order by ID from Oracle E-Business Suite and returns shipment status, estimated delivery, and line-item details for store associates and customer service agents."
  tags:
    - retail
    - order-management
    - oracle-e-business-suite
capability:
  exposes:
    - type: mcp
      namespace: retail-orders
      port: 8080
      tools:
        - name: get-order-status
          description: "Look up an order by order number. Returns order status, shipment tracking, estimated delivery date, and line items."
          inputParameters:
            - name: order_number
              in: body
              type: string
              description: "The Oracle E-Business Suite order number."
          call: "oracle-ebs.get-order"
          with:
            order_number: "{{order_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.OrderHeader.FlowStatusCode"
            - name: tracking_number
              type: string
              mapping: "$.OrderHeader.ShippingDetails.TrackingNumber"
            - name: estimated_delivery
              type: string
              mapping: "$.OrderHeader.ShippingDetails.EstimatedDelivery"
  consumes:
    - type: http
      namespace: oracle-ebs
      baseUri: "https://gap-ebs.oraclecloud.com/webservices/rest/oe/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: orders
          path: "/orders/{{order_number}}"
          inputParameters:
            - name: order_number
              in: path
          operations:
            - name: get-order
              method: GET

Checks on-call at Gap.

naftiko: "0.5"
info:
  label: "PagerDuty On-Call Check"
  description: "Checks on-call at Gap."
  tags:
    - incident-management
    - pagerduty
    - on-call
capability:
  exposes:
    - type: mcp
      namespace: pd-oncall
      port: 8080
      tools:
        - name: get-oncall
          description: "Check on-call at Gap."
          inputParameters:
            - name: schedule_id
              in: body
              type: string
              description: "Schedule ID."
          call: "pagerduty.get-oncall"
          with:
            schedule_id: "{{schedule_id}}"
          outputParameters:
            - name: user
              type: string
              mapping: "$.oncalls[0].user.summary"
  consumes:
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: oncalls
          path: "/oncalls"
          operations:
            - name: get-oncall
              method: GET

Retrieves an employee record from PeopleSoft HCM by employee ID, returning department, job title, hire date, and manager information.

naftiko: "0.5"
info:
  label: "PeopleSoft Employee Record Lookup"
  description: "Retrieves an employee record from PeopleSoft HCM by employee ID, returning department, job title, hire date, and manager information."
  tags:
    - hr
    - peoplesoft
capability:
  exposes:
    - type: mcp
      namespace: hr
      port: 8080
      tools:
        - name: get-employee
          description: "Look up an employee in PeopleSoft by employee ID. Returns name, department, title, hire date, and manager."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The PeopleSoft employee ID."
          call: "peoplesoft.get-employee"
          with:
            employee_id: "{{employee_id}}"
  consumes:
    - type: http
      namespace: peoplesoft
      baseUri: "https://gap-hrms.peoplesoft.com/PSIGW/RESTListeningConnector"
      authentication:
        type: basic
        username: "$secrets.peoplesoft_user"
        password: "$secrets.peoplesoft_password"
      resources:
        - name: employees
          path: "/EMPLOYEE_CI.v1/{{employee_id}}"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-employee
              method: GET

Creates postmortems at Gap.

naftiko: "0.5"
info:
  label: "Incident Postmortem Pipeline"
  description: "Creates postmortems at Gap."
  tags:
    - incident-management
    - postmortem
    - pagerduty
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: postmortem
      port: 8080
      tools:
        - name: create-postmortem
          description: "Create postmortem at Gap."
          inputParameters:
            - name: incident_id
              in: body
              type: string
              description: "Incident ID."
          steps:
            - name: timeline
              type: call
              call: "pagerduty.get-log"
              with:
                id: "{{incident_id}}"
            - name: metrics
              type: call
              call: "datadog.get-metrics"
              with:
                incident: "{{incident_id}}"
            - name: doc
              type: call
              call: "confluence.create-page"
              with:
                title: "Postmortem: {{timeline.title}}"
                body: "Impact: {{metrics.impact}}"
            - name: review
              type: call
              call: "calendar.create-event"
              with:
                title: "Review: {{timeline.title}}"
  consumes:
    - type: http
      namespace: pagerduty
      baseUri: "https://api.pagerduty.com"
      authentication:
        type: bearer
        token: "$secrets.pagerduty_token"
      resources:
        - name: incidents
          path: "/incidents/{{id}}/log_entries"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-log
              method: GET
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: incidents
          path: "/incidents"
          operations:
            - name: get-metrics
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://gap.com.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: calendar
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.microsoft_graph_token"
      resources:
        - name: events
          path: "/users/sre/events"
          operations:
            - name: create-event
              method: POST

Checks Power BI refresh at Gap.

naftiko: "0.5"
info:
  label: "Power BI Refresh Check"
  description: "Checks Power BI refresh at Gap."
  tags:
    - analytics
    - power-bi
    - dashboards
capability:
  exposes:
    - type: mcp
      namespace: pbi-refresh
      port: 8080
      tools:
        - name: check-refresh
          description: "Check refresh at Gap."
          inputParameters:
            - name: dataset_id
              in: body
              type: string
              description: "Dataset ID."
          call: "power-bi.get-refresh"
          with:
            dataset_id: "{{dataset_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.value[0].status"
  consumes:
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: get-refresh
              method: GET

Queries real-time inventory levels from Oracle Cloud for a given SKU across all Gap brand stores and distribution centers.

naftiko: "0.5"
info:
  label: "Product Inventory Check"
  description: "Queries real-time inventory levels from Oracle Cloud for a given SKU across all Gap brand stores and distribution centers."
  tags:
    - retail
    - inventory
    - oracle-cloud
capability:
  exposes:
    - type: mcp
      namespace: inventory
      port: 8080
      tools:
        - name: check-inventory
          description: "Given a SKU and optional location code, return current inventory quantity, reserved stock, and available-to-promise count."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "The product SKU identifier."
            - name: location_code
              in: body
              type: string
              description: "Optional store or DC location code."
          call: "oracle-cloud.get-inventory"
          with:
            sku: "{{sku}}"
            location_code: "{{location_code}}"
          outputParameters:
            - name: on_hand_quantity
              type: number
              mapping: "$.InventoryBalance.OnHandQuantity"
            - name: available_to_promise
              type: number
              mapping: "$.InventoryBalance.AvailableToPromise"
  consumes:
    - type: http
      namespace: oracle-cloud
      baseUri: "https://gap.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: inventory-balances
          path: "/inventoryBalances?q=ItemNumber={{sku}};LocationCode={{location_code}}"
          inputParameters:
            - name: sku
              in: query
            - name: location_code
              in: query
          operations:
            - name: get-inventory
              method: GET

Coordinates a new product launch by verifying inventory in Oracle Cloud, scheduling marketing emails in MailChimp, activating social ads on Meta, publishing product pages to the BigCommerce storefront, and notifying cross-functional teams in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Product Launch Readiness Orchestrator"
  description: "Coordinates a new product launch by verifying inventory in Oracle Cloud, scheduling marketing emails in MailChimp, activating social ads on Meta, publishing product pages to the BigCommerce storefront, and notifying cross-functional teams in Microsoft Teams."
  tags:
    - retail
    - product-launch
    - oracle-cloud
    - mailchimp
    - meta
    - bigcommerce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: product-launch
      port: 8080
      tools:
        - name: launch-product
          description: "Given a product SKU and launch date, verify inventory, schedule email, activate ads, publish to storefront, and notify teams."
          inputParameters:
            - name: sku
              in: body
              type: string
              description: "The product SKU."
            - name: launch_date
              in: body
              type: string
              description: "Launch date in YYYY-MM-DD format."
            - name: product_name
              in: body
              type: string
              description: "The product name."
          steps:
            - name: verify-inventory
              type: call
              call: "oracle-cloud.get-inventory"
              with:
                sku: "{{sku}}"
            - name: schedule-email
              type: call
              call: "mailchimp.schedule-campaign"
              with:
                subject: "New Arrival: {{product_name}} — Available Now!"
                schedule_time: "{{launch_date}}T09:00:00Z"
            - name: activate-ads
              type: call
              call: "meta.create-ad"
              with:
                campaign_name: "Launch_{{sku}}"
                start_time: "{{launch_date}}T00:00:00Z"
            - name: publish-product
              type: call
              call: "bigcommerce.create-product"
              with:
                name: "{{product_name}}"
                sku: "{{sku}}"
                is_visible: true
            - name: notify-teams
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "product-launches"
                channel_id: "general"
                text: "Product {{product_name}} ({{sku}}) launch ready for {{launch_date}}. Inventory: {{verify-inventory.on_hand_quantity}} units. Email: scheduled. Social ads: activated. Storefront: published."
  consumes:
    - type: http
      namespace: oracle-cloud
      baseUri: "https://gap.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: inventory
          path: "/inventoryBalances?q=ItemNumber={{sku}}"
          inputParameters:
            - name: sku
              in: query
          operations:
            - name: get-inventory
              method: GET
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_api_key"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: schedule-campaign
              method: POST
    - type: http
      namespace: meta
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.meta_ads_token"
      resources:
        - name: ads
          path: "/act_{{ad_account_id}}/ads"
          inputParameters:
            - name: ad_account_id
              in: path
          operations:
            - name: create-ad
              method: POST
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/{{store_hash}}/v3"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      resources:
        - name: products
          path: "/catalog/products"
          operations:
            - name: create-product
              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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Generates compliance reports at Gap from Snowflake, Power BI, and email.

naftiko: "0.5"
info:
  label: "Quarterly Compliance Report Pipeline"
  description: "Generates compliance reports at Gap from Snowflake, Power BI, and email."
  tags:
    - compliance
    - reporting
    - snowflake
    - power-bi
capability:
  exposes:
    - type: mcp
      namespace: compliance-rpt
      port: 8080
      tools:
        - name: gen-report
          description: "Generate compliance reports at Gap."
          inputParameters:
            - name: quarter
              in: body
              type: string
              description: "Quarter."
            - name: type
              in: body
              type: string
              description: "Type."
          steps:
            - name: data
              type: call
              call: "snowflake.query"
              with:
                query: "SELECT * FROM compliance WHERE q='{{quarter}}'"
            - name: metrics
              type: call
              call: "analytics.compute"
              with:
                data: "{{data.results}}"
            - name: refresh
              type: call
              call: "power-bi.refresh"
              with:
                dataset: "compliance"
            - name: send
              type: call
              call: "email.send"
              with:
                to: "compliance@co.com"
                subject: "{{type}} - {{quarter}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://gap.com.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: query
              method: POST
    - type: http
      namespace: analytics
      baseUri: "https://analytics.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: metrics
          path: "/compute"
          operations:
            - name: compute
              method: POST
    - type: http
      namespace: power-bi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.power_bi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset}}/refreshes"
          inputParameters:
            - name: dataset
              in: path
          operations:
            - name: refresh
              method: POST
    - type: http
      namespace: email
      baseUri: "https://email.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST

Checks Redis at Gap.

naftiko: "0.5"
info:
  label: "Redis Cache Status"
  description: "Checks Redis at Gap."
  tags:
    - caching
    - redis
    - infrastructure
capability:
  exposes:
    - type: mcp
      namespace: redis
      port: 8080
      tools:
        - name: check-cache
          description: "Check Redis at Gap."
          inputParameters:
            - name: instance
              in: body
              type: string
              description: "Instance ID."
          call: "redis.get-info"
          with:
            instance: "{{instance}}"
          outputParameters:
            - name: memory
              type: string
              mapping: "$.used_memory_human"
  consumes:
    - type: http
      namespace: redis
      baseUri: "https://redis.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.redis_token"
      resources:
        - name: instances
          path: "/instances/{{instance}}/info"
          inputParameters:
            - name: instance
              in: path
          operations:
            - name: get-info
              method: GET

Checks release readiness at Gap.

naftiko: "0.5"
info:
  label: "Release Readiness Pipeline"
  description: "Checks release readiness at Gap."
  tags:
    - release-management
    - devops
    - quality
capability:
  exposes:
    - type: mcp
      namespace: release-ready
      port: 8080
      tools:
        - name: check-release
          description: "Check release at Gap."
          inputParameters:
            - name: release_id
              in: body
              type: string
              description: "Release ID."
            - name: project
              in: body
              type: string
              description: "Project."
          steps:
            - name: tests
              type: call
              call: "azdo.get-tests"
              with:
                project: "{{project}}"
                release: "{{release_id}}"
            - name: quality
              type: call
              call: "sonarqube.get-gate"
              with:
                project: "{{project}}"
            - name: security
              type: call
              call: "security.get-scan"
              with:
                project: "{{project}}"
            - name: doc
              type: call
              call: "confluence.create-page"
              with:
                title: "Release - {{release_id}}"
                body: "Tests: {{tests.pass_rate}}% Quality: {{quality.status}}"
  consumes:
    - type: http
      namespace: azdo
      baseUri: "https://dev.azure.com/gap.com"
      authentication:
        type: bearer
        token: "$secrets.azdo_token"
      resources:
        - name: tests
          path: "/{{project}}/_apis/test/runs"
          inputParameters:
            - name: project
              in: path
          operations:
            - name: get-tests
              method: GET
    - type: http
      namespace: sonarqube
      baseUri: "https://sonarqube.gap.com/api"
      authentication:
        type: bearer
        token: "$secrets.sonarqube_token"
      resources:
        - name: quality
          path: "/qualitygates/project_status"
          operations:
            - name: get-gate
              method: GET
    - type: http
      namespace: security
      baseUri: "https://security.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.security_token"
      resources:
        - name: scans
          path: "/results"
          operations:
            - name: get-scan
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://gap.com.atlassian.net/wiki/rest/api"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST

Retrieves a customer profile from Salesforce by email or customer ID, including order history summary, loyalty tier, and contact preferences.

naftiko: "0.5"
info:
  label: "Salesforce Customer Lookup"
  description: "Retrieves a customer profile from Salesforce by email or customer ID, including order history summary, loyalty tier, and contact preferences."
  tags:
    - customer-service
    - crm
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: crm
      port: 8080
      tools:
        - name: get-customer-profile
          description: "Look up a customer in Salesforce by email. Returns name, loyalty tier, lifetime value, and recent order count."
          inputParameters:
            - name: customer_email
              in: body
              type: string
              description: "The customer email address."
          call: "salesforce.get-contact"
          with:
            email: "{{customer_email}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://gap.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/query?q=SELECT+Id,Name,Loyalty_Tier__c,Lifetime_Value__c+FROM+Contact+WHERE+Email='{{email}}'"
          inputParameters:
            - name: email
              in: query
          operations:
            - name: get-contact
              method: GET

Checks SAP PO at Gap.

naftiko: "0.5"
info:
  label: "SAP PO Check"
  description: "Checks SAP PO at Gap."
  tags:
    - procurement
    - sap
    - purchase-orders
capability:
  exposes:
    - type: mcp
      namespace: sap-po
      port: 8080
      tools:
        - name: get-po
          description: "Check PO at Gap."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "PO number."
          call: "sap.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: vendor
              type: string
              mapping: "$.order.vendor"
            - name: status
              type: string
              mapping: "$.order.status"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://sap.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: purchase-orders
          path: "/purchase-orders/{{po_number}}"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET

Pulls historical sales data from Oracle E-Business Suite, retrieves web trend data from Google Analytics, runs the forecast model via Azure Functions, stores results in PostgreSQL, and shares the forecast with planning teams in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Seasonal Demand Forecasting Pipeline"
  description: "Pulls historical sales data from Oracle E-Business Suite, retrieves web trend data from Google Analytics, runs the forecast model via Azure Functions, stores results in PostgreSQL, and shares the forecast with planning teams in Microsoft Teams."
  tags:
    - supply-chain
    - forecasting
    - oracle-e-business-suite
    - google-analytics
    - azure-functions
    - postgresql
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: demand-forecasting
      port: 8080
      tools:
        - name: run-demand-forecast
          description: "Given a product category and forecast horizon, pull historical data, run the forecast, store results, and notify the planning team."
          inputParameters:
            - name: category
              in: body
              type: string
              description: "The product category to forecast."
            - name: horizon_weeks
              in: body
              type: number
              description: "Number of weeks to forecast forward."
          steps:
            - name: get-historical-sales
              type: call
              call: "oracle-ebs.get-sales-history"
              with:
                category: "{{category}}"
            - name: get-web-trends
              type: call
              call: "google-analytics.run-report"
              with:
                dimension: "productCategory"
                filter: "{{category}}"
            - name: run-model
              type: call
              call: "azure-functions.invoke"
              with:
                function_name: "demand-forecast"
                payload:
                  historical: "{{get-historical-sales.data}}"
                  web_trends: "{{get-web-trends.data}}"
                  horizon: "{{horizon_weeks}}"
            - name: store-results
              type: call
              call: "postgresql.insert"
              with:
                table: "demand_forecasts"
                data: "{{run-model.forecast}}"
            - name: notify-planning
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "planning-team"
                channel_id: "forecasts"
                text: "Demand forecast complete for {{category}}: {{horizon_weeks}}-week outlook. Predicted units: {{run-model.total_units}}. Dashboard updated."
  consumes:
    - type: http
      namespace: oracle-ebs
      baseUri: "https://gap-ebs.oraclecloud.com/webservices/rest/oe/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: sales-history
          path: "/salesHistory"
          operations:
            - name: get-sales-history
              method: GET
    - type: http
      namespace: google-analytics
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/properties/{{property_id}}:runReport"
          inputParameters:
            - name: property_id
              in: path
          operations:
            - name: run-report
              method: POST
    - type: http
      namespace: azure-functions
      baseUri: "https://gap-functions.azurewebsites.net/api"
      authentication:
        type: apiKey
        name: "x-functions-key"
        in: header
        value: "$secrets.azure_functions_key"
      resources:
        - name: functions
          path: "/{{function_name}}"
          inputParameters:
            - name: function_name
              in: path
          operations:
            - name: invoke
              method: POST
    - type: http
      namespace: postgresql
      baseUri: "https://gap-pgrest.internal/rest/v1"
      authentication:
        type: bearer
        token: "$secrets.pgrest_token"
      resources:
        - name: tables
          path: "/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: insert
              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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Coordinates a seasonal promotion by updating product pricing in Oracle Cloud, scheduling the email campaign in MailChimp, publishing Instagram ad creative via Meta, and notifying the merchandising team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Seasonal Promotion Launch Orchestrator"
  description: "Coordinates a seasonal promotion by updating product pricing in Oracle Cloud, scheduling the email campaign in MailChimp, publishing Instagram ad creative via Meta, and notifying the merchandising team in Microsoft Teams."
  tags:
    - marketing
    - promotions
    - oracle-cloud
    - mailchimp
    - meta
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: promo-launch
      port: 8080
      tools:
        - name: launch-promotion
          description: "Given a promotion ID, discount percentage, start date, and target audience, coordinate pricing update, email blast scheduling, social ad activation, and team notification."
          inputParameters:
            - name: promotion_id
              in: body
              type: string
              description: "The internal promotion identifier."
            - name: discount_pct
              in: body
              type: number
              description: "Discount percentage for the promotion."
            - name: start_date
              in: body
              type: string
              description: "Promotion start date in YYYY-MM-DD format."
            - name: audience_segment
              in: body
              type: string
              description: "Target customer segment for the promotion."
          steps:
            - name: update-pricing
              type: call
              call: "oracle-cloud.update-price-list"
              with:
                promotion_id: "{{promotion_id}}"
                discount_pct: "{{discount_pct}}"
                effective_date: "{{start_date}}"
            - name: schedule-email
              type: call
              call: "mailchimp.schedule-campaign"
              with:
                segment: "{{audience_segment}}"
                schedule_time: "{{start_date}}T08:00:00Z"
                subject: "Gap Sale: {{discount_pct}}% Off — Starts Now!"
            - name: activate-social-ad
              type: call
              call: "meta.create-ad"
              with:
                campaign_name: "Promo_{{promotion_id}}"
                audience: "{{audience_segment}}"
                start_time: "{{start_date}}T00:00:00Z"
            - name: notify-merch-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "merchandising-team"
                channel_id: "promotions"
                text: "Promotion {{promotion_id}} launched: {{discount_pct}}% off starting {{start_date}}. Email scheduled: {{schedule-email.campaign_id}}. Social ad: {{activate-social-ad.ad_id}}."
  consumes:
    - type: http
      namespace: oracle-cloud
      baseUri: "https://gap.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: price-lists
          path: "/priceLists"
          operations:
            - name: update-price-list
              method: PATCH
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_api_key"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: schedule-campaign
              method: POST
    - type: http
      namespace: meta
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.meta_ads_token"
      resources:
        - name: ads
          path: "/act_{{ad_account_id}}/ads"
          inputParameters:
            - name: ad_account_id
              in: path
          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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Remediates vulnerabilities at Gap via scanning, Jira, and Slack.

naftiko: "0.5"
info:
  label: "Security Vulnerability Remediation Pipeline"
  description: "Remediates vulnerabilities at Gap via scanning, Jira, and Slack."
  tags:
    - security
    - vulnerability-management
    - jira
capability:
  exposes:
    - type: mcp
      namespace: vuln-fix
      port: 8080
      tools:
        - name: remediate
          description: "Fix vulnerabilities at Gap."
          inputParameters:
            - name: target
              in: body
              type: string
              description: "Target."
            - name: policy
              in: body
              type: string
              description: "Policy."
          steps:
            - name: scan
              type: call
              call: "qualys.scan"
              with:
                target: "{{target}}"
                policy: "{{policy}}"
            - name: prioritize
              type: call
              call: "security.prioritize"
              with:
                scan: "{{scan.id}}"
            - name: ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "SEC"
                summary: "Vulns: {{prioritize.critical}} critical"
            - name: notify
              type: call
              call: "slack.post-message"
              with:
                channel: "#security"
                text: "Scan: {{prioritize.critical}} critical"
  consumes:
    - type: http
      namespace: qualys
      baseUri: "https://qualysapi.qualys.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.qualys_token"
      resources:
        - name: scans
          path: "/fo/scan"
          operations:
            - name: scan
              method: POST
    - type: http
      namespace: security
      baseUri: "https://security.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.security_token"
      resources:
        - name: vulns
          path: "/prioritize"
          operations:
            - name: prioritize
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://gap.com.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Checks IT incident in ServiceNow for Gap.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Detail Check"
  description: "Checks IT incident in ServiceNow for Gap."
  tags:
    - it-service
    - servicenow
    - incident-management
capability:
  exposes:
    - type: mcp
      namespace: snow-incident
      port: 8080
      tools:
        - name: check-incident
          description: "Check incident at Gap."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "Incident number."
          call: "servicenow.get-incident"
          with:
            number: "{{incident_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result.state"
            - name: priority
              type: string
              mapping: "$.result.priority"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://gap.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: get-incident
              method: GET

Looks up a ServiceNow incident by number and returns current state, priority, assigned group, and last update timestamp.

naftiko: "0.5"
info:
  label: "ServiceNow Incident Status"
  description: "Looks up a ServiceNow incident by number and returns current state, priority, assigned group, and last update timestamp."
  tags:
    - it-operations
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: it-ops
      port: 8080
      tools:
        - name: get-incident
          description: "Retrieve a ServiceNow incident by incident number. Returns state, priority, assigned group, and short description."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number (e.g. INC0012345)."
          call: "servicenow.get-incident"
          with:
            incident_number: "{{incident_number}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://gap.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident?sysparm_query=number={{incident_number}}"
          inputParameters:
            - name: incident_number
              in: query
          operations:
            - name: get-incident
              method: GET

Searches SharePoint for brand creative assets by keyword and file type, returning download links and metadata for marketing and design teams.

naftiko: "0.5"
info:
  label: "SharePoint Brand Asset Retrieval"
  description: "Searches SharePoint for brand creative assets by keyword and file type, returning download links and metadata for marketing and design teams."
  tags:
    - marketing
    - brand
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: brand-assets
      port: 8080
      tools:
        - name: search-brand-assets
          description: "Search Gap SharePoint brand library by keyword and optional file type. Returns matching file names, URLs, and last-modified dates."
          inputParameters:
            - name: keyword
              in: body
              type: string
              description: "Search keyword for brand assets."
            - name: file_type
              in: body
              type: string
              description: "Optional file extension filter (e.g. png, psd, ai)."
          call: "sharepoint.search-files"
          with:
            keyword: "{{keyword}}"
            file_type: "{{file_type}}"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: search
          path: "/gap-brand-hub/drive/root/search(q='{{keyword}}')"
          inputParameters:
            - name: keyword
              in: path
          operations:
            - name: search-files
              method: GET

Retrieves SharePoint metadata at Gap.

naftiko: "0.5"
info:
  label: "SharePoint File Metadata"
  description: "Retrieves SharePoint metadata at Gap."
  tags:
    - document-management
    - sharepoint
    - collaboration
capability:
  exposes:
    - type: mcp
      namespace: sp-docs
      port: 8080
      tools:
        - name: get-file
          description: "Look up file at Gap."
          inputParameters:
            - name: site_id
              in: body
              type: string
              description: "Site ID."
            - name: file_path
              in: body
              type: string
              description: "Path."
          call: "sharepoint.get-file"
          with:
            site_id: "{{site_id}}"
            path: "{{file_path}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.name"
            - name: size
              type: number
              mapping: "$.size"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.microsoft_graph_token"
      resources:
        - name: files
          path: "/sites/{{site_id}}/drive/root:/{{path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: path
              in: path
          operations:
            - name: get-file
              method: GET

Monitors SLAs at Gap via Datadog and Slack.

naftiko: "0.5"
info:
  label: "SLA Monitoring Pipeline"
  description: "Monitors SLAs at Gap via Datadog and Slack."
  tags:
    - operations
    - sla
    - datadog
    - slack
capability:
  exposes:
    - type: mcp
      namespace: sla-monitor
      port: 8080
      tools:
        - name: check-sla
          description: "Monitor SLAs at Gap."
          inputParameters:
            - name: service
              in: body
              type: string
              description: "Service."
            - name: target
              in: body
              type: number
              description: "SLA target %."
          steps:
            - name: metrics
              type: call
              call: "datadog.get-sla"
              with:
                service: "{{service}}"
            - name: check
              type: call
              call: "analytics.check-sla"
              with:
                uptime: "{{metrics.uptime}}"
                target: "{{target}}"
            - name: alert
              type: call
              call: "slack.post-message"
              with:
                channel: "#ops"
                text: "SLA: {{service}} at {{metrics.uptime}}% (target: {{target}}%)"
            - name: log
              type: call
              call: "servicenow.create-incident"
              with:
                desc: "SLA breach: {{service}}"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: metrics
          path: "/metrics"
          operations:
            - name: get-sla
              method: GET
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://gap.com.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: create-incident
              method: POST

Searches Splunk at Gap.

naftiko: "0.5"
info:
  label: "Splunk Log Search"
  description: "Searches Splunk at Gap."
  tags:
    - security
    - splunk
    - logging
capability:
  exposes:
    - type: mcp
      namespace: splunk-search
      port: 8080
      tools:
        - name: search-logs
          description: "Search logs at Gap."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "SPL query."
          call: "splunk.search"
          with:
            query: "{{query}}"
          outputParameters:
            - name: count
              type: number
              mapping: "$.results.count"
  consumes:
    - type: http
      namespace: splunk
      baseUri: "https://splunk.gap.com:8089/services"
      authentication:
        type: bearer
        token: "$secrets.splunk_token"
      resources:
        - name: search
          path: "/search/jobs"
          operations:
            - name: search
              method: POST

Retrieves a point-of-sale transaction from Square by transaction ID, returning payment details, line items, and tender information for in-store purchases.

naftiko: "0.5"
info:
  label: "Square POS Transaction Lookup"
  description: "Retrieves a point-of-sale transaction from Square by transaction ID, returning payment details, line items, and tender information for in-store purchases."
  tags:
    - retail
    - pos
    - square
capability:
  exposes:
    - type: mcp
      namespace: pos
      port: 8080
      tools:
        - name: get-transaction
          description: "Look up a Square POS transaction by ID. Returns total, line items, payment method, and timestamp."
          inputParameters:
            - name: transaction_id
              in: body
              type: string
              description: "The Square transaction ID."
            - name: location_id
              in: body
              type: string
              description: "The Square location ID."
          call: "square.get-payment"
          with:
            transaction_id: "{{transaction_id}}"
            location_id: "{{location_id}}"
  consumes:
    - type: http
      namespace: square
      baseUri: "https://connect.squareup.com/v2"
      authentication:
        type: bearer
        token: "$secrets.square_token"
      resources:
        - name: payments
          path: "/locations/{{location_id}}/transactions/{{transaction_id}}"
          inputParameters:
            - name: location_id
              in: path
            - name: transaction_id
              in: path
          operations:
            - name: get-payment
              method: GET

On new store hire in PeopleSoft, creates a ServiceNow onboarding ticket, provisions a SharePoint training folder, and sends a Microsoft Teams welcome message to the store manager.

naftiko: "0.5"
info:
  label: "Store Associate Onboarding Orchestrator"
  description: "On new store hire in PeopleSoft, creates a ServiceNow onboarding ticket, provisions a SharePoint training folder, and sends a Microsoft Teams welcome message to the store manager."
  tags:
    - hr
    - onboarding
    - peoplesoft
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: store-onboarding
      port: 8080
      tools:
        - name: onboard-store-associate
          description: "Given a PeopleSoft employee ID and store location, orchestrate onboarding: open IT ticket, create training folder, and notify the store manager."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The PeopleSoft employee ID for the new hire."
            - name: store_location
              in: body
              type: string
              description: "The store location code."
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
          steps:
            - name: get-employee
              type: call
              call: "peoplesoft.get-employee"
              with:
                employee_id: "{{employee_id}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "New store hire onboarding: {{get-employee.name}} at {{store_location}}"
                category: "hr_onboarding"
                assigned_group: "Store_IT"
                description: "Onboard {{get-employee.name}} starting {{start_date}} at store {{store_location}}. Provision POS access and uniforms."
            - name: create-training-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "store-training"
                folder_path: "NewHires/{{get-employee.name}}_{{start_date}}"
            - name: notify-manager
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.manager_email}}"
                text: "New hire {{get-employee.name}} starts {{start_date}} at {{store_location}}. Onboarding ticket: {{open-ticket.number}}. Training materials: {{create-training-folder.url}}."
  consumes:
    - type: http
      namespace: peoplesoft
      baseUri: "https://gap-hrms.peoplesoft.com/PSIGW/RESTListeningConnector"
      authentication:
        type: basic
        username: "$secrets.peoplesoft_user"
        password: "$secrets.peoplesoft_password"
      resources:
        - name: employees
          path: "/EMPLOYEE_CI.v1/{{employee_id}}"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-employee
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://gap.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: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: folders
          path: "/{{site_id}}/drive/root:/{{folder_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Triggers a store compliance check by pulling the store profile from Oracle Cloud, verifying open ServiceNow compliance tickets, and generating an audit summary document in SharePoint with notification to the compliance team.

naftiko: "0.5"
info:
  label: "Store Compliance Audit Orchestrator"
  description: "Triggers a store compliance check by pulling the store profile from Oracle Cloud, verifying open ServiceNow compliance tickets, and generating an audit summary document in SharePoint with notification to the compliance team."
  tags:
    - compliance
    - retail
    - oracle-cloud
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: store-compliance
      port: 8080
      tools:
        - name: run-compliance-audit
          description: "Given a store ID, pull the store profile, check open compliance tickets, generate audit document, and notify the compliance team."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The store location ID."
            - name: audit_type
              in: body
              type: string
              description: "Type of compliance audit (e.g. safety, loss-prevention, ADA)."
          steps:
            - name: get-store
              type: call
              call: "oracle-cloud.get-location"
              with:
                location_id: "{{store_id}}"
            - name: get-open-tickets
              type: call
              call: "servicenow.query-incidents"
              with:
                query: "location={{store_id}}^category={{audit_type}}^stateNOT IN6,7"
            - name: create-audit-doc
              type: call
              call: "sharepoint.create-file"
              with:
                site_id: "compliance-hub"
                folder_path: "Audits/{{store_id}}/{{audit_type}}"
                content: "Store: {{get-store.name}}. Open tickets: {{get-open-tickets.count}}. Audit type: {{audit_type}}."
            - name: notify-compliance
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "compliance-team"
                channel_id: "store-audits"
                text: "Compliance audit triggered for store {{store_id}} ({{get-store.name}}). Type: {{audit_type}}. Open tickets: {{get-open-tickets.count}}. Report: {{create-audit-doc.url}}."
  consumes:
    - type: http
      namespace: oracle-cloud
      baseUri: "https://gap.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: locations
          path: "/locations/{{location_id}}"
          inputParameters:
            - name: location_id
              in: path
          operations:
            - name: get-location
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://gap.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: incidents
          path: "/table/incident"
          operations:
            - name: query-incidents
              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}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: create-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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

When a critical POS or network issue is reported at a Gap store, creates a ServiceNow incident, pages the on-call engineer via Microsoft Teams, and tracks the outage in Jira.

naftiko: "0.5"
info:
  label: "Store IT Incident Escalation Pipeline"
  description: "When a critical POS or network issue is reported at a Gap store, creates a ServiceNow incident, pages the on-call engineer via Microsoft Teams, and tracks the outage in Jira."
  tags:
    - it-operations
    - incident-management
    - servicenow
    - microsoft-teams
    - jira
capability:
  exposes:
    - type: mcp
      namespace: store-incidents
      port: 8080
      tools:
        - name: escalate-store-incident
          description: "Given store ID, issue category, and severity, create a ServiceNow incident, notify the on-call engineer, and create a Jira tracking issue."
          inputParameters:
            - name: store_id
              in: body
              type: string
              description: "The Gap store location ID."
            - name: issue_category
              in: body
              type: string
              description: "Category of the issue (e.g. POS, Network, HVAC)."
            - name: severity
              in: body
              type: string
              description: "Severity level (1-Critical, 2-High, 3-Medium)."
            - name: description
              in: body
              type: string
              description: "Detailed description of the issue."
          steps:
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Store {{store_id}} — {{issue_category}} issue"
                category: "{{issue_category}}"
                priority: "{{severity}}"
                description: "{{description}}"
            - name: page-oncall
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "store-it-support"
                channel_id: "critical-alerts"
                text: "CRITICAL: Store {{store_id}} {{issue_category}} issue. Severity: {{severity}}. Incident: {{create-incident.number}}. {{description}}"
            - name: create-tracking-issue
              type: call
              call: "jira.create-issue"
              with:
                project: "STOREOPS"
                summary: "Store {{store_id}} {{issue_category}} outage"
                description: "ServiceNow: {{create-incident.number}}. Severity: {{severity}}. {{description}}"
                issue_type: "Bug"
                priority: "{{severity}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://gap.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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://gap.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 Oracle Cloud detects a supplier delivery delay, creates a ServiceNow incident, notifies the supply chain team in Microsoft Teams, and updates the Jira backlog with impacted product lines.

naftiko: "0.5"
info:
  label: "Supply Chain Disruption Alert Orchestrator"
  description: "When Oracle Cloud detects a supplier delivery delay, creates a ServiceNow incident, notifies the supply chain team in Microsoft Teams, and updates the Jira backlog with impacted product lines."
  tags:
    - supply-chain
    - oracle-cloud
    - servicenow
    - microsoft-teams
    - jira
capability:
  exposes:
    - type: mcp
      namespace: supply-chain-alerts
      port: 8080
      tools:
        - name: alert-supply-disruption
          description: "Given a supplier ID and delay details, create a ServiceNow incident, notify the supply chain team, and log the disruption in Jira."
          inputParameters:
            - name: supplier_id
              in: body
              type: string
              description: "The Oracle Cloud supplier identifier."
            - name: delay_days
              in: body
              type: number
              description: "Number of days the shipment is delayed."
            - name: affected_skus
              in: body
              type: string
              description: "Comma-separated list of affected SKUs."
          steps:
            - name: get-supplier
              type: call
              call: "oracle-cloud.get-supplier"
              with:
                supplier_id: "{{supplier_id}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Supply delay: {{get-supplier.supplier_name}} — {{delay_days}} days"
                category: "supply_chain"
                priority: "2"
                description: "Supplier {{get-supplier.supplier_name}} delayed by {{delay_days}} days. Affected SKUs: {{affected_skus}}."
            - name: notify-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "supply-chain-ops"
                channel_id: "disruptions"
                text: "ALERT: {{get-supplier.supplier_name}} shipment delayed {{delay_days}} days. Incident: {{create-incident.number}}. SKUs: {{affected_skus}}."
            - name: log-in-jira
              type: call
              call: "jira.create-issue"
              with:
                project: "SCM"
                summary: "Supply disruption: {{get-supplier.supplier_name}}"
                description: "Delay: {{delay_days}} days. Incident: {{create-incident.number}}. Affected SKUs: {{affected_skus}}."
                issue_type: "Bug"
  consumes:
    - type: http
      namespace: oracle-cloud
      baseUri: "https://gap.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: suppliers
          path: "/suppliers/{{supplier_id}}"
          inputParameters:
            - name: supplier_id
              in: path
          operations:
            - name: get-supplier
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://gap.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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://gap.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

Retrieves Teams activity at Gap.

naftiko: "0.5"
info:
  label: "Teams Channel Activity"
  description: "Retrieves Teams activity at Gap."
  tags:
    - communications
    - microsoft-teams
    - analytics
capability:
  exposes:
    - type: mcp
      namespace: teams-activity
      port: 8080
      tools:
        - name: get-activity
          description: "Check Teams activity at Gap."
          inputParameters:
            - name: team_id
              in: body
              type: string
              description: "Team ID."
            - name: channel_id
              in: body
              type: string
              description: "Channel ID."
          call: "teams.get-messages"
          with:
            team_id: "{{team_id}}"
            channel_id: "{{channel_id}}"
          outputParameters:
            - name: count
              type: number
              mapping: "$.value.length"
  consumes:
    - type: http
      namespace: teams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.microsoft_graph_token"
      resources:
        - name: messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: get-messages
              method: GET

Triggers a Terraform plan against Gap's Azure infrastructure state to detect configuration drift and posts any detected changes to Microsoft Teams.

naftiko: "0.5"
info:
  label: "Terraform Infrastructure Drift Check"
  description: "Triggers a Terraform plan against Gap's Azure infrastructure state to detect configuration drift and posts any detected changes to Microsoft Teams."
  tags:
    - infrastructure
    - terraform
    - microsoft-azure
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: infra-ops
      port: 8080
      tools:
        - name: check-infra-drift
          description: "Given a Terraform workspace, run a plan to detect drift and notify the infrastructure team of any changes."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "The Terraform Cloud workspace ID."
          steps:
            - name: create-run
              type: call
              call: "terraform.create-run"
              with:
                workspace_id: "{{workspace_id}}"
                is_destroy: false
                message: "Automated drift check"
            - name: notify-infra
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "infrastructure"
                channel_id: "drift-detection"
                text: "Terraform drift check initiated for workspace {{workspace_id}}. Run ID: {{create-run.id}}. Status: {{create-run.status}}."
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: runs
          path: "/runs"
          operations:
            - name: create-run
              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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Checks Terraform workspace at Gap.

naftiko: "0.5"
info:
  label: "Terraform Workspace Check"
  description: "Checks Terraform workspace at Gap."
  tags:
    - infrastructure
    - terraform
    - iac
capability:
  exposes:
    - type: mcp
      namespace: tf-ws
      port: 8080
      tools:
        - name: check-ws
          description: "Check workspace at Gap."
          inputParameters:
            - name: workspace_id
              in: body
              type: string
              description: "Workspace ID."
          call: "terraform.get-ws"
          with:
            workspace_id: "{{workspace_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.data.attributes.name"
  consumes:
    - type: http
      namespace: terraform
      baseUri: "https://app.terraform.io/api/v2"
      authentication:
        type: bearer
        token: "$secrets.terraform_token"
      resources:
        - name: workspaces
          path: "/workspaces/{{workspace_id}}"
          inputParameters:
            - name: workspace_id
              in: path
          operations:
            - name: get-ws
              method: GET

Retrieves recent Twitter mentions of Gap brand handles and hashtags via the Twitter API, returning tweet count, sentiment breakdown, and top-engaged posts.

naftiko: "0.5"
info:
  label: "Twitter Brand Mention Monitor"
  description: "Retrieves recent Twitter mentions of Gap brand handles and hashtags via the Twitter API, returning tweet count, sentiment breakdown, and top-engaged posts."
  tags:
    - marketing
    - social-media
    - twitter
capability:
  exposes:
    - type: mcp
      namespace: social-listening
      port: 8080
      tools:
        - name: get-brand-mentions
          description: "Search for recent Twitter mentions of a query string. Returns tweet count, top tweets by engagement, and sentiment distribution."
          inputParameters:
            - name: query
              in: body
              type: string
              description: "The search query (e.g. @Gap OR #GapStyle)."
            - name: max_results
              in: body
              type: number
              description: "Maximum number of tweets to return."
          call: "twitter.search-tweets"
          with:
            query: "{{query}}"
            max_results: "{{max_results}}"
  consumes:
    - 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

Checks Vault secret at Gap.

naftiko: "0.5"
info:
  label: "Vault Secret Metadata"
  description: "Checks Vault secret at Gap."
  tags:
    - security
    - vault
    - secrets-management
capability:
  exposes:
    - type: mcp
      namespace: vault
      port: 8080
      tools:
        - name: check-secret
          description: "Check secret at Gap."
          inputParameters:
            - name: path
              in: body
              type: string
              description: "Secret path."
          call: "vault.get-metadata"
          with:
            path: "{{path}}"
          outputParameters:
            - name: version
              type: number
              mapping: "$.data.current_version"
  consumes:
    - type: http
      namespace: vault
      baseUri: "https://vault.gap.com/v1"
      authentication:
        type: bearer
        token: "$secrets.vault_token"
      resources:
        - name: secrets
          path: "/secret/metadata/{{path}}"
          inputParameters:
            - name: path
              in: path
          operations:
            - name: get-metadata
              method: GET

Processes invoices at Gap via OCR, SAP matching, approval, and Oracle recording.

naftiko: "0.5"
info:
  label: "Vendor Invoice Processing Pipeline"
  description: "Processes invoices at Gap via OCR, SAP matching, approval, and Oracle recording."
  tags:
    - finance
    - accounts-payable
    - sap
    - oracle
capability:
  exposes:
    - type: mcp
      namespace: invoice-proc
      port: 8080
      tools:
        - name: process-invoice
          description: "Process invoices at Gap."
          inputParameters:
            - name: invoice_id
              in: body
              type: string
              description: "Invoice ID."
            - name: vendor_id
              in: body
              type: string
              description: "Vendor ID."
          steps:
            - name: extract
              type: call
              call: "ocr.extract"
              with:
                doc: "{{invoice_id}}"
            - name: match
              type: call
              call: "sap.match-po"
              with:
                vendor: "{{vendor_id}}"
                amount: "{{extract.total}}"
            - name: approve
              type: call
              call: "workflow.submit"
              with:
                invoice: "{{invoice_id}}"
            - name: record
              type: call
              call: "oracle.create-payment"
              with:
                invoice: "{{invoice_id}}"
  consumes:
    - type: http
      namespace: ocr
      baseUri: "https://ocr.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.ocr_token"
      resources:
        - name: invoices
          path: "/extract"
          operations:
            - name: extract
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://sap.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.sap_token"
      resources:
        - name: pos
          path: "/match"
          operations:
            - name: match-po
              method: POST
    - type: http
      namespace: workflow
      baseUri: "https://workflow.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workflow_token"
      resources:
        - name: approvals
          path: "/submit"
          operations:
            - name: submit
              method: POST
    - type: http
      namespace: oracle
      baseUri: "https://oracle.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_token"
      resources:
        - name: payments
          path: "/payments"
          operations:
            - name: create-payment
              method: POST

When a new vendor is approved, creates the vendor record in Oracle Cloud, opens a ServiceNow compliance checklist, uploads the contract to SharePoint, and notifies procurement in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Vendor Onboarding Orchestrator"
  description: "When a new vendor is approved, creates the vendor record in Oracle Cloud, opens a ServiceNow compliance checklist, uploads the contract to SharePoint, and notifies procurement in Microsoft Teams."
  tags:
    - supply-chain
    - procurement
    - oracle-cloud
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: vendor-onboarding
      port: 8080
      tools:
        - name: onboard-vendor
          description: "Given vendor details, create the vendor in Oracle Cloud, open a compliance task, store the contract, and notify the team."
          inputParameters:
            - name: vendor_name
              in: body
              type: string
              description: "The vendor company name."
            - name: vendor_email
              in: body
              type: string
              description: "The vendor primary contact email."
            - name: contract_url
              in: body
              type: string
              description: "URL to the signed contract document."
          steps:
            - name: create-vendor
              type: call
              call: "oracle-cloud.create-supplier"
              with:
                supplier_name: "{{vendor_name}}"
                contact_email: "{{vendor_email}}"
            - name: open-compliance-task
              type: call
              call: "servicenow.create-task"
              with:
                short_description: "Vendor compliance checklist: {{vendor_name}}"
                assigned_group: "Procurement_Compliance"
                description: "Complete compliance review for new vendor {{vendor_name}}. Vendor ID: {{create-vendor.supplier_id}}."
            - name: upload-contract
              type: call
              call: "sharepoint.upload-file"
              with:
                site_id: "procurement-docs"
                folder_path: "Contracts/{{vendor_name}}"
                file_url: "{{contract_url}}"
            - name: notify-procurement
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "procurement-team"
                channel_id: "vendor-management"
                text: "New vendor onboarded: {{vendor_name}} (ID: {{create-vendor.supplier_id}}). Compliance task: {{open-compliance-task.number}}. Contract: {{upload-contract.url}}."
  consumes:
    - type: http
      namespace: oracle-cloud
      baseUri: "https://gap.oraclecloud.com/fscmRestApi/resources/v1"
      authentication:
        type: bearer
        token: "$secrets.oracle_cloud_token"
      resources:
        - name: suppliers
          path: "/suppliers"
          operations:
            - name: create-supplier
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://gap.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: tasks
          path: "/table/sc_task"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: 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}}"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Reviews vendors at Gap.

naftiko: "0.5"
info:
  label: "Quarterly Vendor Review Pipeline"
  description: "Reviews vendors at Gap."
  tags:
    - procurement
    - vendor-management
    - review
capability:
  exposes:
    - type: mcp
      namespace: vendor-review
      port: 8080
      tools:
        - name: review-vendor
          description: "Review vendors at Gap."
          inputParameters:
            - name: vendor_id
              in: body
              type: string
              description: "Vendor ID."
            - name: quarter
              in: body
              type: string
              description: "Quarter."
          steps:
            - name: perf
              type: call
              call: "procurement.get-metrics"
              with:
                vendor: "{{vendor_id}}"
                q: "{{quarter}}"
            - name: scorecard
              type: call
              call: "analytics.scorecard"
              with:
                data: "{{perf.data}}"
            - name: invite
              type: call
              call: "email.send"
              with:
                to: "{{perf.contact}}"
                subject: "QBR - {{quarter}}"
            - name: schedule
              type: call
              call: "calendar.create-event"
              with:
                title: "QBR - {{perf.name}}"
  consumes:
    - type: http
      namespace: procurement
      baseUri: "https://procurement.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.procurement_token"
      resources:
        - name: vendors
          path: "/vendors/{{vendor}}/metrics"
          inputParameters:
            - name: vendor
              in: path
          operations:
            - name: get-metrics
              method: GET
    - type: http
      namespace: analytics
      baseUri: "https://analytics.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.analytics_token"
      resources:
        - name: scorecards
          path: "/compute"
          operations:
            - name: scorecard
              method: POST
    - type: http
      namespace: email
      baseUri: "https://email.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.email_token"
      resources:
        - name: messages
          path: "/send"
          operations:
            - name: send
              method: POST
    - type: http
      namespace: calendar
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.microsoft_graph_token"
      resources:
        - name: events
          path: "/users/proc/events"
          operations:
            - name: create-event
              method: POST

Pulls A/B test results from Google Optimize, correlates with revenue data from Google Analytics, logs findings in Confluence, and notifies the UX team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Website A/B Test Results Aggregator"
  description: "Pulls A/B test results from Google Optimize, correlates with revenue data from Google Analytics, logs findings in Confluence, and notifies the UX team via Microsoft Teams."
  tags:
    - e-commerce
    - experimentation
    - google-optimize
    - google-analytics
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: ab-testing
      port: 8080
      tools:
        - name: aggregate-test-results
          description: "Given an experiment ID, pull test results from Google Optimize, correlate with GA revenue, document findings, and notify the team."
          inputParameters:
            - name: experiment_id
              in: body
              type: string
              description: "The Google Optimize experiment ID."
            - name: date_range
              in: body
              type: string
              description: "Date range for the test period in YYYY-MM-DD/YYYY-MM-DD format."
          steps:
            - name: get-experiment
              type: call
              call: "google-optimize.get-experiment"
              with:
                experiment_id: "{{experiment_id}}"
            - name: get-revenue-data
              type: call
              call: "google-analytics.run-report"
              with:
                start_date: "{{date_range}}"
                experiment_id: "{{experiment_id}}"
            - name: document-findings
              type: call
              call: "confluence.create-page"
              with:
                space_key: "UX"
                title: "A/B Test Results: {{get-experiment.name}}"
                body: "Experiment: {{get-experiment.name}}. Winner: {{get-experiment.winner_variant}}. Revenue lift: {{get-revenue-data.revenue_delta}}%."
            - name: notify-ux-team
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "ux-team"
                channel_id: "experiments"
                text: "A/B test {{get-experiment.name}} complete. Winner: {{get-experiment.winner_variant}}. Revenue lift: {{get-revenue-data.revenue_delta}}%. Full report: {{document-findings.url}}."
  consumes:
    - type: http
      namespace: google-optimize
      baseUri: "https://www.googleapis.com/analytics/v3"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: experiments
          path: "/management/accounts/{{account_id}}/webproperties/{{property_id}}/experiments/{{experiment_id}}"
          inputParameters:
            - name: experiment_id
              in: path
          operations:
            - name: get-experiment
              method: GET
    - type: http
      namespace: google-analytics
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/properties/{{property_id}}:runReport"
          inputParameters:
            - name: property_id
              in: path
          operations:
            - name: run-report
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://gap.atlassian.net/wiki/rest/api"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/content"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
          inputParameters:
            - name: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Aggregates weekly sales data from Oracle E-Business Suite, correlates with web conversion from Google Analytics, creates a Power BI dataset refresh, and posts the summary to Microsoft Teams.

naftiko: "0.5"
info:
  label: "Weekly Sales Reporting Pipeline"
  description: "Aggregates weekly sales data from Oracle E-Business Suite, correlates with web conversion from Google Analytics, creates a Power BI dataset refresh, and posts the summary to Microsoft Teams."
  tags:
    - retail
    - sales
    - reporting
    - oracle-e-business-suite
    - google-analytics
    - power-bi
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: sales-reporting
      port: 8080
      tools:
        - name: generate-weekly-sales-report
          description: "Given a week ending date, pull sales from Oracle EBS, web data from GA, refresh the Power BI dataset, and post results to Teams."
          inputParameters:
            - name: week_ending
              in: body
              type: string
              description: "Week ending date in YYYY-MM-DD format."
          steps:
            - name: get-sales-data
              type: call
              call: "oracle-ebs.get-sales-summary"
              with:
                week_ending: "{{week_ending}}"
            - name: get-web-conversions
              type: call
              call: "google-analytics.run-report"
              with:
                end_date: "{{week_ending}}"
            - name: refresh-dataset
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "weekly-sales-dashboard"
            - name: post-summary
              type: call
              call: "msteams.post-channel-message"
              with:
                team_id: "leadership"
                channel_id: "weekly-reports"
                text: "Weekly Sales Report (w/e {{week_ending}}): Total revenue: {{get-sales-data.total_revenue}}. Online conversions: {{get-web-conversions.conversion_rate}}%. Power BI dashboard refreshed."
  consumes:
    - type: http
      namespace: oracle-ebs
      baseUri: "https://gap-ebs.oraclecloud.com/webservices/rest/oe/v1"
      authentication:
        type: basic
        username: "$secrets.oracle_ebs_user"
        password: "$secrets.oracle_ebs_password"
      resources:
        - name: sales-summary
          path: "/salesSummary"
          operations:
            - name: get-sales-summary
              method: GET
    - type: http
      namespace: google-analytics
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_analytics_token"
      resources:
        - name: reports
          path: "/properties/{{property_id}}:runReport"
          inputParameters:
            - name: property_id
              in: path
          operations:
            - name: run-report
              method: POST
    - type: http
      namespace: powerbi
      baseUri: "https://api.powerbi.com/v1.0/myorg"
      authentication:
        type: bearer
        token: "$secrets.powerbi_token"
      resources:
        - name: datasets
          path: "/datasets/{{dataset_id}}/refreshes"
          inputParameters:
            - name: dataset_id
              in: path
          operations:
            - name: refresh-dataset
              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: team_id
              in: path
            - name: channel_id
              in: path
          operations:
            - name: post-channel-message
              method: POST

Sends a WhatsApp business message to a customer for order confirmations, shipping updates, or promotional alerts from Gap.

naftiko: "0.5"
info:
  label: "WhatsApp Customer Notification"
  description: "Sends a WhatsApp business message to a customer for order confirmations, shipping updates, or promotional alerts from Gap."
  tags:
    - customer-service
    - messaging
    - whatsapp
capability:
  exposes:
    - type: mcp
      namespace: messaging
      port: 8080
      tools:
        - name: send-whatsapp-message
          description: "Send a WhatsApp business message to a phone number."
          inputParameters:
            - name: phone_number
              in: body
              type: string
              description: "The recipient phone number in E.164 format."
            - name: message_template
              in: body
              type: string
              description: "The WhatsApp message template name."
            - name: parameters
              in: body
              type: string
              description: "Template parameters as JSON."
          call: "whatsapp.send-message"
          with:
            to: "{{phone_number}}"
            template: "{{message_template}}"
            params: "{{parameters}}"
  consumes:
    - type: http
      namespace: whatsapp
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.whatsapp_token"
      resources:
        - name: messages
          path: "/{{phone_number_id}}/messages"
          inputParameters:
            - name: phone_number_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves employee profile from Workday for Gap.

naftiko: "0.5"
info:
  label: "Workday Employee Profile Lookup"
  description: "Retrieves employee profile from Workday for Gap."
  tags:
    - hr
    - workday
    - employee-directory
capability:
  exposes:
    - type: mcp
      namespace: workday-profile
      port: 8080
      tools:
        - name: get-employee-profile
          description: "Look up Gap employee in Workday."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "Employee ID."
          call: "workday.get-worker"
          with:
            employee_id: "{{employee_id}}"
          outputParameters:
            - name: name
              type: string
              mapping: "$.worker.name"
            - name: title
              type: string
              mapping: "$.worker.title"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5.gap.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{employee_id}}"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: get-worker
              method: GET

Enriches a business contact record using ZoomInfo by email, returning company name, title, industry, and direct phone number for the sales team.

naftiko: "0.5"
info:
  label: "ZoomInfo Lead Enrichment"
  description: "Enriches a business contact record using ZoomInfo by email, returning company name, title, industry, and direct phone number for the sales team."
  tags:
    - sales
    - lead-enrichment
    - zoominfo
capability:
  exposes:
    - type: mcp
      namespace: sales-intelligence
      port: 8080
      tools:
        - name: enrich-contact
          description: "Enrich a contact by email address via ZoomInfo. Returns company, title, industry, and phone."
          inputParameters:
            - name: email
              in: body
              type: string
              description: "The contact email address to enrich."
          call: "zoominfo.enrich-contact"
          with:
            email: "{{email}}"
  consumes:
    - type: http
      namespace: zoominfo
      baseUri: "https://api.zoominfo.com"
      authentication:
        type: bearer
        token: "$secrets.zoominfo_token"
      resources:
        - name: contacts
          path: "/enrich/contact"
          operations:
            - name: enrich-contact
              method: POST