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