Barnes Nobles Capabilities
Naftiko 0.5 capability definitions for Barnes Nobles - 100 capabilities showing integration workflows and service orchestrations.
When a BigCommerce cart is abandoned, sends a recovery email via Adobe Campaign with a reading-focused offer and logs the outreach in Google Sheets.
naftiko: "0.5"
info:
label: "Abandoned Cart Recovery Pipeline"
description: "When a BigCommerce cart is abandoned, sends a recovery email via Adobe Campaign with a reading-focused offer and logs the outreach in Google Sheets."
tags:
- e-commerce
- marketing
- bigcommerce
- adobe-campaign
- google-sheets
capability:
exposes:
- type: mcp
namespace: cart-recovery
port: 8080
tools:
- name: recover-cart
description: "Send a personalized book cart recovery email and track it."
inputParameters:
- name: cart_id
in: body
type: string
description: "Abandoned cart ID."
- name: customer_email
in: body
type: string
description: "Customer email."
- name: offer_code
in: body
type: string
description: "Offer code."
steps:
- name: get-cart
type: call
call: "bigcommerce.get-abandoned-cart"
with:
cart_id: "{{cart_id}}"
- name: send-recovery
type: call
call: "adobe-campaign.send-transactional"
with:
template: "cart_recovery_books"
recipient_email: "{{customer_email}}"
offer_code: "{{offer_code}}"
cart_total: "{{get-cart.cart_amount}}"
- name: log-attempt
type: call
call: "gsheets.append-row"
with:
spreadsheet_id: "bn_cart_recovery"
range: "Attempts!A:D"
values:
- "{{cart_id}}"
- "{{customer_email}}"
- "{{offer_code}}"
- "sent"
consumes:
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: abandoned-carts
path: "/abandoned-carts/{{cart_id}}"
inputParameters:
- name: cart_id
in: path
operations:
- name: get-abandoned-cart
method: GET
- type: http
namespace: adobe-campaign
baseUri: "https://mc.adobe.io/bn/campaign"
authentication:
type: bearer
token: "$secrets.adobe_campaign_token"
resources:
- name: transactional
path: "/profileAndServicesExt/transactionalEmail"
operations:
- name: send-transactional
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: values
path: "/{{spreadsheet_id}}/values/{{range}}:append"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: append-row
method: POST
Retrieves sales performance by book category from Adobe Analytics including revenue, units sold, and average order value.
naftiko: "0.5"
info:
label: "Adobe Analytics Book Category Performance"
description: "Retrieves sales performance by book category from Adobe Analytics including revenue, units sold, and average order value."
tags:
- analytics
- publishing
- adobe-analytics
capability:
exposes:
- type: mcp
namespace: category-analytics
port: 8080
tools:
- name: get-category-performance
description: "Fetch book category sales performance from Adobe Analytics."
inputParameters:
- name: category
in: body
type: string
description: "Book category such as Fiction, Non-Fiction, or Children."
- name: date_range
in: body
type: string
description: "Reporting date range."
call: "adobe-analytics.get-category-report"
with:
rsid: "bn_ecommerce"
category: "{{category}}"
date_range: "{{date_range}}"
outputParameters:
- name: revenue
type: number
mapping: "$.report.data.revenue"
- name: units_sold
type: number
mapping: "$.report.data.units"
- name: avg_order_value
type: number
mapping: "$.report.data.avg_order_value"
consumes:
- type: http
namespace: adobe-analytics
baseUri: "https://analytics.adobe.io/api/bn"
authentication:
type: bearer
token: "$secrets.adobe_analytics_token"
inputParameters:
- name: x-api-key
in: header
value: "$secrets.adobe_api_key"
resources:
- name: reports
path: "/reports"
operations:
- name: get-category-report
method: POST
When an author event is confirmed, creates the event in the store calendar system, posts an announcement to Facebook and Instagram, sends an invitation email via Adobe Campaign, and creates a Jira task for the events team.
naftiko: "0.5"
info:
label: "Author Event Booking Orchestrator"
description: "When an author event is confirmed, creates the event in the store calendar system, posts an announcement to Facebook and Instagram, sends an invitation email via Adobe Campaign, and creates a Jira task for the events team."
tags:
- retail
- events
- facebook
- instagram
- adobe-campaign
- jira
capability:
exposes:
- type: mcp
namespace: author-events
port: 8080
tools:
- name: book-author-event
description: "Coordinate an author signing or reading event across all channels."
inputParameters:
- name: author_name
in: body
type: string
description: "Author name."
- name: book_title
in: body
type: string
description: "Featured book title."
- name: store_id
in: body
type: string
description: "Store hosting the event."
- name: event_date
in: body
type: string
description: "Event date and time."
steps:
- name: create-event
type: call
call: "events.create-store-event"
with:
store_id: "{{store_id}}"
title: "Author Event: {{author_name}} - {{book_title}}"
date: "{{event_date}}"
- name: post-facebook
type: call
call: "facebook.create-event-post"
with:
text: "Join us at Barnes & Noble for a signing with {{author_name}}, author of {{book_title}}! {{event_date}}. #BNEvents"
- name: post-instagram
type: call
call: "instagram.create-post"
with:
caption: "Meet {{author_name}} at Barnes & Noble! {{book_title}} signing on {{event_date}}. #BNEvents #AuthorSigning"
- name: send-invites
type: call
call: "adobe-campaign.create-delivery"
with:
template: "author_event"
label: "You are invited: {{author_name}} at B&N"
scheduled_date: "{{event_date}}"
- name: create-task
type: call
call: "jira.create-issue"
with:
project: "EVENTS"
issue_type: "Task"
summary: "Prepare for {{author_name}} event at store {{store_id}}"
due_date: "{{event_date}}"
consumes:
- type: http
namespace: events
baseUri: "https://events.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.events_token"
resources:
- name: store-events
path: "/stores/{{store_id}}/events"
inputParameters:
- name: store_id
in: path
operations:
- name: create-store-event
method: POST
- type: http
namespace: facebook
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.facebook_token"
resources:
- name: posts
path: "/me/feed"
operations:
- name: create-event-post
method: POST
- type: http
namespace: instagram
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.instagram_token"
resources:
- name: media
path: "/me/media"
operations:
- name: create-post
method: POST
- type: http
namespace: adobe-campaign
baseUri: "https://mc.adobe.io/bn/campaign"
authentication:
type: bearer
token: "$secrets.adobe_campaign_token"
resources:
- name: deliveries
path: "/profileAndServicesExt/delivery"
operations:
- name: create-delivery
method: POST
- type: http
namespace: jira
baseUri: "https://barnesnoble.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
Promotes an upcoming author signing event by creating a Facebook post, an Instagram story, scheduling a promotional email via Adobe Campaign, and posting details to the store Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Author Signing Event Promotion Pipeline"
description: "Promotes an upcoming author signing event by creating a Facebook post, an Instagram story, scheduling a promotional email via Adobe Campaign, and posting details to the store Microsoft Teams channel."
tags:
- retail
- facebook
- instagram
- adobe-campaign
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: event-promo
port: 8080
tools:
- name: promote-signing-event
description: "Orchestrate multi-channel promotion for an author signing event."
inputParameters:
- name: author
in: body
type: string
description: "Author name."
- name: book_title
in: body
type: string
description: "Book title."
- name: event_date
in: body
type: string
description: "Event date."
- name: store_name
in: body
type: string
description: "Host store name."
steps:
- name: post-facebook
type: call
call: "facebook.create-post"
with:
message: "Meet {{author}} at {{store_name}} on {{event_date}}! Get your copy of {{book_title}} signed. #BNEvents"
- name: post-instagram
type: call
call: "instagram.create-post"
with:
caption: "Author signing: {{author}} at {{store_name}}, {{event_date}}. {{book_title}} #BNEvents #AuthorSigning"
- name: schedule-email
type: call
call: "adobe-campaign.create-delivery"
with:
template: "author_event"
label: "Author Signing: {{author}} at {{store_name}}"
scheduled_date: "{{event_date}}"
- name: notify-store
type: call
call: "msteams.send-message"
with:
channel_id: "store_ops"
text: "Author signing event promotion launched for {{author}} at {{store_name}} on {{event_date}}."
consumes:
- type: http
namespace: facebook
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.facebook_page_token"
resources:
- name: feed
path: "/me/feed"
operations:
- name: create-post
method: POST
- type: http
namespace: instagram
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.instagram_token"
resources:
- name: media
path: "/me/media"
operations:
- name: create-post
method: POST
- type: http
namespace: adobe-campaign
baseUri: "https://mc.adobe.io/bn/campaign"
authentication:
type: bearer
token: "$secrets.adobe_campaign_token"
resources:
- name: deliveries
path: "/profileAndServicesExt/delivery"
operations:
- name: create-delivery
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Triggers an Azure Data Factory pipeline run to refresh data warehouse tables with the latest transactional data.
naftiko: "0.5"
info:
label: "Azure Data Factory Pipeline Trigger"
description: "Triggers an Azure Data Factory pipeline run to refresh data warehouse tables with the latest transactional data."
tags:
- retail
- azure-data-factory
capability:
exposes:
- type: mcp
namespace: adf
port: 8080
tools:
- name: trigger-pipeline
description: "Trigger an Azure Data Factory pipeline run."
inputParameters:
- name: pipeline_name
in: body
type: string
description: "Name of the ADF pipeline."
call: "adf.create-pipeline-run"
with:
pipeline_name: "{{pipeline_name}}"
outputParameters:
- name: run_id
type: string
mapping: "$.runId"
consumes:
- type: http
namespace: adf
baseUri: "https://management.azure.com/subscriptions/{{sub_id}}/resourceGroups/bn-rg/providers/Microsoft.DataFactory/factories/bn-adf"
authentication:
type: bearer
token: "$secrets.azure_mgmt_token"
resources:
- name: pipelines
path: "/pipelines/{{pipeline_name}}/createRun?api-version=2018-06-01"
inputParameters:
- name: pipeline_name
in: path
operations:
- name: create-pipeline-run
method: POST
Retrieves the latest build status for an Azure DevOps pipeline.
naftiko: "0.5"
info:
label: "Azure DevOps Build Status Checker"
description: "Retrieves the latest build status for an Azure DevOps pipeline."
tags:
- devops
- ci-cd
- azure-devops
capability:
exposes:
- type: mcp
namespace: cicd
port: 8080
tools:
- name: get-build-status
description: "Check the latest Azure DevOps build status."
inputParameters:
- name: pipeline_id
in: body
type: string
description: "Pipeline ID."
call: "azdo.get-latest-build"
with:
pipeline_id: "{{pipeline_id}}"
outputParameters:
- name: build_number
type: string
mapping: "$.value[0].buildNumber"
- name: result
type: string
mapping: "$.value[0].result"
consumes:
- type: http
namespace: azdo
baseUri: "https://dev.azure.com/bn/Digital/_apis/build"
authentication:
type: basic
username: ""
password: "$secrets.azdo_pat"
resources:
- name: builds
path: "/builds?definitions={{pipeline_id}}&$top=1&api-version=7.0"
inputParameters:
- name: pipeline_id
in: path
operations:
- name: get-latest-build
method: GET
Retrieves a secret value from Azure Key Vault by secret name for use in downstream integrations.
naftiko: "0.5"
info:
label: "Azure Key Vault Secret Retriever"
description: "Retrieves a secret value from Azure Key Vault by secret name for use in downstream integrations."
tags:
- retail
- azure-key-vault
capability:
exposes:
- type: mcp
namespace: azure-kv
port: 8080
tools:
- name: get-secret
description: "Retrieve a secret from Azure Key Vault."
inputParameters:
- name: secret_name
in: body
type: string
description: "Name of the secret."
call: "azure-kv.get-secret"
with:
secret_name: "{{secret_name}}"
outputParameters:
- name: value
type: string
mapping: "$.value"
- name: id
type: string
mapping: "$.id"
consumes:
- type: http
namespace: azure-kv
baseUri: "https://bn-vault.vault.azure.net"
authentication:
type: bearer
token: "$secrets.azure_kv_token"
resources:
- name: secrets
path: "/secrets/{{secret_name}}?api-version=7.4"
inputParameters:
- name: secret_name
in: path
operations:
- name: get-secret
method: GET
Pulls the latest bestseller rankings from the internal analytics system, updates the featured collection in BigCommerce, and posts the updated list to the booklovers Facebook page.
naftiko: "0.5"
info:
label: "Bestseller List Update Pipeline"
description: "Pulls the latest bestseller rankings from the internal analytics system, updates the featured collection in BigCommerce, and posts the updated list to the booklovers Facebook page."
tags:
- retail
- publishing
- bigcommerce
- facebook
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: bestsellers
port: 8080
tools:
- name: update-bestseller-list
description: "Refresh the bestseller collection on the website and announce it across channels."
inputParameters:
- name: category
in: body
type: string
description: "Bestseller category such as fiction or nonfiction."
- name: week_of
in: body
type: string
description: "Week date."
steps:
- name: get-rankings
type: call
call: "analytics.get-bestsellers"
with:
category: "{{category}}"
week_of: "{{week_of}}"
- name: update-collection
type: call
call: "bigcommerce.update-collection"
with:
collection_id: "bestsellers_{{category}}"
product_ids: "{{get-rankings.isbn_list}}"
- name: post-facebook
type: call
call: "facebook.create-post"
with:
text: "This week's B&N {{category}} bestsellers are here! Check out the top picks at barnesandnoble.com. #BNBestsellers"
- name: notify-merch
type: call
call: "msteams.send-message"
with:
channel_id: "merchandising"
text: "Bestseller list updated for {{category}} (week of {{week_of}}). {{get-rankings.count}} titles refreshed."
consumes:
- type: http
namespace: analytics
baseUri: "https://analytics.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.analytics_token"
resources:
- name: bestsellers
path: "/bestsellers"
operations:
- name: get-bestsellers
method: GET
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: collections
path: "/catalog/categories/{{collection_id}}"
inputParameters:
- name: collection_id
in: path
operations:
- name: update-collection
method: PUT
- type: http
namespace: facebook
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.facebook_token"
resources:
- name: posts
path: "/me/feed"
operations:
- name: create-post
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves the current fulfillment status, shipping method, and total for a Barnes & Noble online order.
naftiko: "0.5"
info:
label: "BigCommerce Order Status Lookup"
description: "Retrieves the current fulfillment status, shipping method, and total for a Barnes & Noble online order."
tags:
- retail
- e-commerce
- bigcommerce
- order-status
capability:
exposes:
- type: mcp
namespace: order-tracking
port: 8080
tools:
- name: get-order-status
description: "Look up an order by ID and return its status and shipping details."
inputParameters:
- name: order_id
in: body
type: string
description: "BigCommerce order ID."
call: "bigcommerce.get-order"
with:
order_id: "{{order_id}}"
outputParameters:
- name: status
type: string
mapping: "$.status"
- name: shipping_method
type: string
mapping: "$.shipping_addresses[0].shipping_method"
- name: total
type: number
mapping: "$.total_inc_tax"
consumes:
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v2"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: orders
path: "/orders/{{order_id}}"
inputParameters:
- name: order_id
in: path
operations:
- name: get-order
method: GET
Searches the B&N online catalog by keyword, author, or ISBN.
naftiko: "0.5"
info:
label: "BigCommerce Product Search"
description: "Searches the B&N online catalog by keyword, author, or ISBN."
tags:
- retail
- e-commerce
- bigcommerce
- books
capability:
exposes:
- type: mcp
namespace: catalog
port: 8080
tools:
- name: search-books
description: "Search the Barnes & Noble book catalog."
inputParameters:
- name: query
in: body
type: string
description: "Search keyword, author, or ISBN."
call: "bigcommerce.search-products"
with:
keyword: "{{query}}"
outputParameters:
- name: products
type: array
mapping: "$.data"
- name: total
type: number
mapping: "$.meta.pagination.total"
consumes:
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: products
path: "/catalog/products?keyword={{keyword}}"
inputParameters:
- name: keyword
in: path
operations:
- name: search-products
method: GET
Processes book club membership renewals by checking member status in Salesforce, processing payment via BigCommerce, sending a renewal confirmation via Adobe Campaign, and logging the renewal in Google Sheets.
naftiko: "0.5"
info:
label: "Book Club Renewal Pipeline"
description: "Processes book club membership renewals by checking member status in Salesforce, processing payment via BigCommerce, sending a renewal confirmation via Adobe Campaign, and logging the renewal in Google Sheets."
tags:
- retail
- salesforce
- bigcommerce
- adobe-campaign
- google-sheets
capability:
exposes:
- type: mcp
namespace: club-renewal
port: 8080
tools:
- name: renew-book-club
description: "Orchestrate book club membership renewal."
inputParameters:
- name: member_id
in: body
type: string
description: "Member ID."
steps:
- name: check-membership
type: call
call: "salesforce.get-member"
with:
member_id: "{{member_id}}"
- name: process-payment
type: call
call: "bigcommerce.create-subscription-order"
with:
customer_id: "{{check-membership.customer_id}}"
plan: "book_club_annual"
- name: send-confirmation
type: call
call: "adobe-campaign.create-delivery"
with:
template: "club_renewal"
label: "Book Club Renewal Confirmation"
recipient_id: "{{member_id}}"
- name: log-renewal
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bn_club_renewals"
data: "{{member_id}},{{process-payment.order_id}},renewed"
consumes:
- type: http
namespace: salesforce
baseUri: "https://barnesandnoble.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: members
path: "/sobjects/Loyalty_Member__c/{{member_id}}"
inputParameters:
- name: member_id
in: path
operations:
- name: get-member
method: GET
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: subscriptions
path: "/orders"
operations:
- name: create-subscription-order
method: POST
- type: http
namespace: adobe-campaign
baseUri: "https://mc.adobe.io/bn/campaign"
authentication:
type: bearer
token: "$secrets.adobe_campaign_token"
resources:
- name: deliveries
path: "/profileAndServicesExt/delivery"
operations:
- name: create-delivery
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
When a customer joins a B&N book club, creates the subscription in the CRM, schedules the first monthly pick email via Adobe Campaign, and logs the enrollment in Google Sheets.
naftiko: "0.5"
info:
label: "Book Club Subscription Manager"
description: "When a customer joins a B&N book club, creates the subscription in the CRM, schedules the first monthly pick email via Adobe Campaign, and logs the enrollment in Google Sheets."
tags:
- retail
- loyalty
- crm
- adobe-campaign
- google-sheets
capability:
exposes:
- type: mcp
namespace: book-clubs
port: 8080
tools:
- name: enroll-book-club
description: "Enroll a customer in a Barnes & Noble book club."
inputParameters:
- name: customer_id
in: body
type: string
description: "Customer ID."
- name: club_name
in: body
type: string
description: "Book club name."
- name: customer_email
in: body
type: string
description: "Customer email."
steps:
- name: create-subscription
type: call
call: "crm.create-subscription"
with:
customer_id: "{{customer_id}}"
club_name: "{{club_name}}"
- name: schedule-welcome
type: call
call: "adobe-campaign.create-delivery"
with:
template: "book_club_welcome"
label: "Welcome to {{club_name}}"
recipient_email: "{{customer_email}}"
- name: log-enrollment
type: call
call: "gsheets.append-row"
with:
spreadsheet_id: "bn_book_clubs"
range: "Enrollments!A:C"
values:
- "{{customer_id}}"
- "{{club_name}}"
- "active"
consumes:
- type: http
namespace: crm
baseUri: "https://crm.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.crm_token"
resources:
- name: subscriptions
path: "/subscriptions"
operations:
- name: create-subscription
method: POST
- type: http
namespace: adobe-campaign
baseUri: "https://mc.adobe.io/bn/campaign"
authentication:
type: bearer
token: "$secrets.adobe_campaign_token"
resources:
- name: deliveries
path: "/profileAndServicesExt/delivery"
operations:
- name: create-delivery
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: values
path: "/{{spreadsheet_id}}/values/{{range}}:append"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: append-row
method: POST
Queries the warehouse management system for current stock levels of a book by ISBN across all store locations and the distribution center.
naftiko: "0.5"
info:
label: "Book Inventory Lookup by ISBN"
description: "Queries the warehouse management system for current stock levels of a book by ISBN across all store locations and the distribution center."
tags:
- retail
- inventory
- books
- wms
capability:
exposes:
- type: mcp
namespace: inventory
port: 8080
tools:
- name: get-book-inventory
description: "Look up current inventory for a book by ISBN across all locations."
inputParameters:
- name: isbn
in: body
type: string
description: "Book ISBN."
call: "wms.get-inventory"
with:
isbn: "{{isbn}}"
outputParameters:
- name: total_units
type: number
mapping: "$.data.total_available"
- name: store_breakdown
type: array
mapping: "$.data.locations"
- name: dc_units
type: number
mapping: "$.data.dc_available"
consumes:
- type: http
namespace: wms
baseUri: "https://wms.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.wms_token"
resources:
- name: inventory
path: "/inventory/{{isbn}}"
inputParameters:
- name: isbn
in: path
operations:
- name: get-inventory
method: GET
Prepares inventory for an upcoming book signing by checking warehouse stock via WMS, creating a transfer order in Oracle EBS if needed, and confirming readiness to the events team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Book Signing Inventory Prep Pipeline"
description: "Prepares inventory for an upcoming book signing by checking warehouse stock via WMS, creating a transfer order in Oracle EBS if needed, and confirming readiness to the events team via Microsoft Teams."
tags:
- retail
- oracle-e-business-suite
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: signing-prep
port: 8080
tools:
- name: prep-signing-inventory
description: "Orchestrate inventory preparation for a book signing event."
inputParameters:
- name: isbn
in: body
type: string
description: "Book ISBN."
- name: store_code
in: body
type: string
description: "Store code hosting the event."
- name: quantity_needed
in: body
type: number
description: "Number of copies needed."
steps:
- name: check-store-stock
type: call
call: "wms.get-inventory"
with:
isbn: "{{isbn}}"
location: "{{store_code}}"
- name: transfer-stock
type: call
call: "oracle-ebs.create-transfer-order"
with:
isbn: "{{isbn}}"
to_store: "{{store_code}}"
quantity: "{{quantity_needed}}"
- name: confirm-readiness
type: call
call: "msteams.send-message"
with:
channel_id: "events"
text: "Signing inventory prep complete for ISBN {{isbn}} at store {{store_code}}. Current stock: {{check-store-stock.quantity}}. Transfer order: {{transfer-stock.order_id}}."
consumes:
- type: http
namespace: wms
baseUri: "https://wms.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.wms_token"
resources:
- name: inventory
path: "/inventory/{{isbn}}"
inputParameters:
- name: isbn
in: path
operations:
- name: get-inventory
method: GET
- type: http
namespace: oracle-ebs
baseUri: "https://erp.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_ebs_token"
resources:
- name: transfer-orders
path: "/transfer-orders"
operations:
- name: create-transfer-order
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves a file from Box cloud storage by file ID, returning file metadata and a temporary download URL.
naftiko: "0.5"
info:
label: "Box File Retrieval"
description: "Retrieves a file from Box cloud storage by file ID, returning file metadata and a temporary download URL."
tags:
- retail
- box
capability:
exposes:
- type: mcp
namespace: box
port: 8080
tools:
- name: get-file
description: "Retrieve a file from Box by file ID."
inputParameters:
- name: file_id
in: body
type: string
description: "Box file ID."
call: "box.get-file-info"
with:
file_id: "{{file_id}}"
outputParameters:
- name: file_name
type: string
mapping: "$.name"
- name: size
type: number
mapping: "$.size"
- name: download_url
type: string
mapping: "$.shared_link.download_url"
consumes:
- type: http
namespace: box
baseUri: "https://api.box.com/2.0"
authentication:
type: bearer
token: "$secrets.box_token"
resources:
- name: files
path: "/files/{{file_id}}"
inputParameters:
- name: file_id
in: path
operations:
- name: get-file-info
method: GET
Queries Cloudflare for DNS records associated with a given zone, returning A, CNAME, and MX record details.
naftiko: "0.5"
info:
label: "Cloudflare DNS Lookup"
description: "Queries Cloudflare for DNS records associated with a given zone, returning A, CNAME, and MX record details."
tags:
- retail
- cloudflare
capability:
exposes:
- type: mcp
namespace: cloudflare
port: 8080
tools:
- name: get-dns-records
description: "Look up DNS records for a Cloudflare zone."
inputParameters:
- name: zone_id
in: body
type: string
description: "Cloudflare zone ID."
call: "cloudflare.list-dns-records"
with:
zone_id: "{{zone_id}}"
outputParameters:
- name: records
type: array
mapping: "$.result"
- name: total_count
type: number
mapping: "$.result_info.total_count"
consumes:
- type: http
namespace: cloudflare
baseUri: "https://api.cloudflare.com/client/v4"
authentication:
type: bearer
token: "$secrets.cloudflare_token"
resources:
- name: dns-records
path: "/zones/{{zone_id}}/dns_records"
inputParameters:
- name: zone_id
in: path
operations:
- name: list-dns-records
method: GET
Searches Confluence for book retail procedures and policy documents.
naftiko: "0.5"
info:
label: "Confluence Knowledge Article Search"
description: "Searches Confluence for book retail procedures and policy documents."
tags:
- collaboration
- confluence
- knowledge-management
capability:
exposes:
- type: mcp
namespace: knowledge-base
port: 8080
tools:
- name: search-articles
description: "Search Confluence for knowledge articles."
inputParameters:
- name: query
in: body
type: string
description: "Search query."
call: "confluence.search"
with:
cql: "text ~ \"{{query}}\" and space = KB"
outputParameters:
- name: results
type: array
mapping: "$.results"
- name: total
type: number
mapping: "$.totalSize"
consumes:
- type: http
namespace: confluence
baseUri: "https://barnesnoble.atlassian.net/wiki/rest/api"
authentication:
type: basic
username: "$secrets.confluence_user"
password: "$secrets.confluence_api_token"
resources:
- name: search
path: "/search"
operations:
- name: search
method: GET
Generates cross-sell recommendations by analyzing purchase history in Teradata, creating product bundles in BigCommerce, and launching a targeted email campaign via Adobe Campaign.
naftiko: "0.5"
info:
label: "Cross-Sell Recommendation Pipeline"
description: "Generates cross-sell recommendations by analyzing purchase history in Teradata, creating product bundles in BigCommerce, and launching a targeted email campaign via Adobe Campaign."
tags:
- retail
- teradata
- bigcommerce
- adobe-campaign
capability:
exposes:
- type: mcp
namespace: cross-sell
port: 8080
tools:
- name: generate-cross-sell
description: "Orchestrate cross-sell recommendation generation and campaign launch."
inputParameters:
- name: category
in: body
type: string
description: "Product category to analyze."
steps:
- name: analyze-purchases
type: call
call: "teradata.run-affinity-analysis"
with:
category: "{{category}}"
- name: create-bundles
type: call
call: "bigcommerce.create-product-bundles"
with:
recommendations: "{{analyze-purchases.pairs}}"
- name: launch-campaign
type: call
call: "adobe-campaign.create-delivery"
with:
template: "cross_sell"
label: "Recommended for You: {{category}}"
segment: "{{category}}_buyers"
consumes:
- type: http
namespace: teradata
baseUri: "https://teradata.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: analytics
path: "/queries/affinity-analysis"
operations:
- name: run-affinity-analysis
method: POST
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: bundles
path: "/catalog/products"
operations:
- name: create-product-bundles
method: POST
- type: http
namespace: adobe-campaign
baseUri: "https://mc.adobe.io/bn/campaign"
authentication:
type: bearer
token: "$secrets.adobe_campaign_token"
resources:
- name: deliveries
path: "/profileAndServicesExt/delivery"
operations:
- name: create-delivery
method: POST
Handles a customer complaint by looking up the customer in Salesforce, creating a ServiceNow case, issuing a gift card via BigCommerce, and sending a resolution email via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Customer Complaint Resolution Pipeline"
description: "Handles a customer complaint by looking up the customer in Salesforce, creating a ServiceNow case, issuing a gift card via BigCommerce, and sending a resolution email via Microsoft Outlook."
tags:
- retail
- salesforce
- servicenow
- bigcommerce
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: complaint
port: 8080
tools:
- name: resolve-complaint
description: "Orchestrate customer complaint resolution workflow."
inputParameters:
- name: customer_email
in: body
type: string
description: "Customer email."
- name: complaint_text
in: body
type: string
description: "Complaint description."
- name: gift_card_amount
in: body
type: number
description: "Gift card compensation amount."
steps:
- name: lookup-customer
type: call
call: "salesforce.get-contact"
with:
email: "{{customer_email}}"
- name: create-case
type: call
call: "servicenow.create-incident"
with:
short_description: "Customer complaint: {{customer_email}}"
description: "{{complaint_text}}"
caller_id: "{{lookup-customer.contact_id}}"
- name: issue-gift-card
type: call
call: "bigcommerce.create-gift-card"
with:
amount: "{{gift_card_amount}}"
recipient_email: "{{customer_email}}"
- name: send-resolution
type: call
call: "outlook.send-email"
with:
to: "{{customer_email}}"
subject: "Your Barnes & Noble Complaint - Resolution"
body: "We apologize for the inconvenience. A ${{gift_card_amount}} gift card has been sent to your email. Case ref: {{create-case.incident_number}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://barnesandnoble.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/sobjects/Contact"
operations:
- name: get-contact
method: GET
- type: http
namespace: servicenow
baseUri: "https://barnesandnoble.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: gift-cards
path: "/marketing/gift-certificates"
operations:
- name: create-gift-card
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Validates a return order in BigCommerce, creates an RMA, updates inventory projections, and sends the customer a return label via Adobe Campaign.
naftiko: "0.5"
info:
label: "Customer Return Processor"
description: "Validates a return order in BigCommerce, creates an RMA, updates inventory projections, and sends the customer a return label via Adobe Campaign."
tags:
- retail
- returns
- bigcommerce
- adobe-campaign
capability:
exposes:
- type: mcp
namespace: returns
port: 8080
tools:
- name: process-return
description: "Process a book return across order, inventory, and communications."
inputParameters:
- name: order_id
in: body
type: string
description: "BigCommerce order ID."
- name: reason
in: body
type: string
description: "Return reason."
- name: customer_email
in: body
type: string
description: "Customer email."
steps:
- name: get-order
type: call
call: "bigcommerce.get-order"
with:
order_id: "{{order_id}}"
- name: create-rma
type: call
call: "oms.create-rma"
with:
order_id: "{{order_id}}"
reason: "{{reason}}"
- name: adjust-inventory
type: call
call: "wms.adjust-projected"
with:
isbn: "{{get-order.products[0].isbn}}"
adjustment: 1
- name: send-label
type: call
call: "adobe-campaign.send-transactional"
with:
template: "return_label"
recipient_email: "{{customer_email}}"
rma_number: "{{create-rma.rma_number}}"
consumes:
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v2"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: orders
path: "/orders/{{order_id}}"
inputParameters:
- name: order_id
in: path
operations:
- name: get-order
method: GET
- type: http
namespace: oms
baseUri: "https://oms.barnesandnoble.com/api/v2"
authentication:
type: bearer
token: "$secrets.oms_token"
resources:
- name: returns
path: "/returns"
operations:
- name: create-rma
method: POST
- type: http
namespace: wms
baseUri: "https://wms.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.wms_token"
resources:
- name: inventory
path: "/inventory/adjust"
operations:
- name: adjust-projected
method: POST
- type: http
namespace: adobe-campaign
baseUri: "https://mc.adobe.io/bn/campaign"
authentication:
type: bearer
token: "$secrets.adobe_campaign_token"
resources:
- name: transactional
path: "/profileAndServicesExt/transactionalEmail"
operations:
- name: send-transactional
method: POST
Collects recent book reviews from BigCommerce, computes average ratings, and posts a weekly summary to the product team Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Customer Review Aggregation Report"
description: "Collects recent book reviews from BigCommerce, computes average ratings, and posts a weekly summary to the product team Microsoft Teams channel."
tags:
- retail
- customer-feedback
- bigcommerce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: review-analytics
port: 8080
tools:
- name: aggregate-reviews
description: "Aggregate product reviews and summarize to the team."
inputParameters:
- name: product_id
in: body
type: string
description: "Product ID."
- name: since_date
in: body
type: string
description: "Start date."
steps:
- name: get-reviews
type: call
call: "bigcommerce.get-reviews"
with:
product_id: "{{product_id}}"
since: "{{since_date}}"
- name: post-summary
type: call
call: "msteams.send-message"
with:
channel_id: "merchandising"
text: "Book {{product_id}} reviews since {{since_date}}: {{get-reviews.count}} reviews, avg {{get-reviews.avg_rating}}/5."
consumes:
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: reviews
path: "/catalog/products/{{product_id}}/reviews"
inputParameters:
- name: product_id
in: path
operations:
- name: get-reviews
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Creates a ServiceNow incident for a customer issue, attaches order context from BigCommerce, and notifies the support team.
naftiko: "0.5"
info:
label: "Customer Support Ticket Creator"
description: "Creates a ServiceNow incident for a customer issue, attaches order context from BigCommerce, and notifies the support team."
tags:
- customer-service
- servicenow
- bigcommerce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: customer-support
port: 8080
tools:
- name: create-support-ticket
description: "Open a support ticket with order context and notify the team."
inputParameters:
- name: order_id
in: body
type: string
description: "Order ID."
- name: customer_email
in: body
type: string
description: "Customer email."
- name: issue
in: body
type: string
description: "Issue description."
steps:
- name: get-order
type: call
call: "bigcommerce.get-order"
with:
order_id: "{{order_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Customer issue: order {{order_id}}"
description: "{{issue}} | Total: {{get-order.total_inc_tax}} | Customer: {{customer_email}}"
category: "customer_service"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "cs_team"
text: "New ticket {{create-incident.number}} for order {{order_id}}."
consumes:
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v2"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: orders
path: "/orders/{{order_id}}"
inputParameters:
- name: order_id
in: path
operations:
- name: get-order
method: GET
- type: http
namespace: servicenow
baseUri: "https://bn.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Pulls daily POS transactions from BigCommerce, compares against Oracle EBS cash receipts, logs variances in Google Sheets, and emails the finance team via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Daily Store Cash Reconciliation"
description: "Pulls daily POS transactions from BigCommerce, compares against Oracle EBS cash receipts, logs variances in Google Sheets, and emails the finance team via Microsoft Outlook."
tags:
- retail
- bigcommerce
- oracle-e-business-suite
- google-sheets
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: cash-recon
port: 8080
tools:
- name: reconcile-cash
description: "Orchestrate daily store cash reconciliation."
inputParameters:
- name: store_code
in: body
type: string
description: "Store code."
- name: date
in: body
type: string
description: "Reconciliation date."
steps:
- name: get-pos-totals
type: call
call: "bigcommerce.get-daily-totals"
with:
store_code: "{{store_code}}"
date: "{{date}}"
- name: get-erp-receipts
type: call
call: "oracle-ebs.get-cash-receipts"
with:
store_code: "{{store_code}}"
date: "{{date}}"
- name: log-variances
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bn_cash_recon"
data: "{{store_code}},{{date}},{{get-pos-totals.total}},{{get-erp-receipts.total}}"
- name: notify-finance
type: call
call: "outlook.send-email"
with:
to: "finance@barnesandnoble.com"
subject: "Cash Reconciliation: Store {{store_code}} - {{date}}"
body: "POS total: ${{get-pos-totals.total}}. ERP receipts: ${{get-erp-receipts.total}}."
consumes:
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: orders
path: "/orders"
operations:
- name: get-daily-totals
method: GET
- type: http
namespace: oracle-ebs
baseUri: "https://erp.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_ebs_token"
resources:
- name: cash-receipts
path: "/cash-receipts"
operations:
- name: get-cash-receipts
method: GET
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Queries Datadog for the health status of critical B&N digital services.
naftiko: "0.5"
info:
label: "Datadog Service Health Check"
description: "Queries Datadog for the health status of critical B&N digital services."
tags:
- monitoring
- devops
- datadog
capability:
exposes:
- type: mcp
namespace: service-health
port: 8080
tools:
- name: get-service-health
description: "Check the health of a B&N digital service in Datadog."
inputParameters:
- name: service_name
in: body
type: string
description: "Service name."
call: "datadog.get-service-status"
with:
service_name: "{{service_name}}"
outputParameters:
- name: status
type: string
mapping: "$.overall_state"
- name: uptime_pct
type: number
mapping: "$.uptime_percentage"
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apikey
key: "$secrets.datadog_api_key"
inputParameters:
- name: DD-APPLICATION-KEY
in: header
value: "$secrets.datadog_app_key"
resources:
- name: monitors
path: "/monitor/search?query=service:{{service_name}}"
inputParameters:
- name: service_name
in: path
operations:
- name: get-service-status
method: GET
Aggregates weekly POS sales for a district and emails the report to the district manager.
naftiko: "0.5"
info:
label: "District Weekly Sales Email"
description: "Aggregates weekly POS sales for a district and emails the report to the district manager."
tags:
- retail
- analytics
- pos
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: district-reporting
port: 8080
tools:
- name: send-district-report
description: "Generate and email the weekly district sales report."
inputParameters:
- name: district_id
in: body
type: string
description: "District ID."
- name: week_ending
in: body
type: string
description: "Week ending date."
- name: manager_email
in: body
type: string
description: "Manager email."
steps:
- name: get-sales
type: call
call: "pos.get-district-sales"
with:
district_id: "{{district_id}}"
week_ending: "{{week_ending}}"
- name: send-report
type: call
call: "outlook.send-email"
with:
to: "{{manager_email}}"
subject: "Weekly Sales - District {{district_id}} ending {{week_ending}}"
body: "Total revenue: ${{get-sales.total_revenue}}. Top store: {{get-sales.top_store}}. YoY comp: {{get-sales.comp_pct}}%."
consumes:
- type: http
namespace: pos
baseUri: "https://pos.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.pos_token"
resources:
- name: district-sales
path: "/districts/{{district_id}}/sales/weekly"
inputParameters:
- name: district_id
in: path
operations:
- name: get-district-sales
method: GET
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: send-mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Queries Dynatrace for real-time performance metrics of the B&N e-commerce platform.
naftiko: "0.5"
info:
label: "Dynatrace Application Performance Monitor"
description: "Queries Dynatrace for real-time performance metrics of the B&N e-commerce platform."
tags:
- monitoring
- devops
- dynatrace
capability:
exposes:
- type: mcp
namespace: apm
port: 8080
tools:
- name: get-app-performance
description: "Retrieve application performance metrics from Dynatrace."
inputParameters:
- name: entity_id
in: body
type: string
description: "Dynatrace entity ID."
call: "dynatrace.get-metrics"
with:
entity_id: "{{entity_id}}"
outputParameters:
- name: response_time
type: number
mapping: "$.dataPoints[0].values[0]"
- name: error_rate
type: number
mapping: "$.dataPoints[1].values[0]"
consumes:
- type: http
namespace: dynatrace
baseUri: "https://bn.live.dynatrace.com/api/v2"
authentication:
type: bearer
token: "$secrets.dynatrace_token"
resources:
- name: metrics
path: "/metrics/query?entitySelector=entityId({{entity_id}})"
inputParameters:
- name: entity_id
in: path
operations:
- name: get-metrics
method: GET
Checks e-commerce application health via Datadog and Dynatrace, and if errors are detected, creates a ServiceNow incident and alerts the engineering team via Microsoft Teams.
naftiko: "0.5"
info:
label: "E-Commerce Site Health Monitor"
description: "Checks e-commerce application health via Datadog and Dynatrace, and if errors are detected, creates a ServiceNow incident and alerts the engineering team via Microsoft Teams."
tags:
- retail
- datadog
- dynatrace
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: site-health
port: 8080
tools:
- name: check-site-health
description: "Orchestrate e-commerce site health check and incident creation."
inputParameters:
- name: service_name
in: body
type: string
description: "Service name to check."
steps:
- name: check-datadog
type: call
call: "datadog.get-service-status"
with:
service: "{{service_name}}"
- name: check-dynatrace
type: call
call: "dynatrace.get-problem-feed"
with:
entity: "{{service_name}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Health degradation detected for {{service_name}}"
description: "Datadog status: {{check-datadog.status}}. Dynatrace problems: {{check-dynatrace.problem_count}}"
urgency: "2"
- name: alert-engineering
type: call
call: "msteams.send-message"
with:
channel_id: "engineering"
text: "Site health alert for {{service_name}}. Incident {{create-incident.incident_number}} created."
consumes:
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: services
path: "/check_run?check={{service}}"
inputParameters:
- name: service
in: query
operations:
- name: get-service-status
method: GET
- type: http
namespace: dynatrace
baseUri: "https://bn.live.dynatrace.com/api/v2"
authentication:
type: bearer
token: "$secrets.dynatrace_token"
resources:
- name: problems
path: "/problems?entitySelector=type(SERVICE),entityName({{entity}})"
inputParameters:
- name: entity
in: query
operations:
- name: get-problem-feed
method: GET
- type: http
namespace: servicenow
baseUri: "https://barnesandnoble.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a new bookseller is hired in PeopleSoft, creates a ServiceNow onboarding ticket, provisions a SharePoint folder for training materials, and sends a welcome message in Microsoft Teams.
naftiko: "0.5"
info:
label: "Employee Onboarding Pipeline"
description: "When a new bookseller is hired in PeopleSoft, creates a ServiceNow onboarding ticket, provisions a SharePoint folder for training materials, and sends a welcome message in Microsoft Teams."
tags:
- hr
- onboarding
- peoplesoft
- servicenow
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: hr-onboarding
port: 8080
tools:
- name: onboard-bookseller
description: "Run the full onboarding workflow for a new Barnes & Noble bookseller."
inputParameters:
- name: employee_id
in: body
type: string
description: "PeopleSoft employee ID."
- name: start_date
in: body
type: string
description: "Start date."
- name: store_id
in: body
type: string
description: "Store location."
steps:
- name: get-employee
type: call
call: "peoplesoft.get-employee"
with:
employee_id: "{{employee_id}}"
- name: create-ticket
type: call
call: "servicenow.create-incident"
with:
short_description: "Onboarding: {{get-employee.full_name}} at store {{store_id}}"
category: "hr_onboarding"
description: "New bookseller starting {{start_date}}."
- name: create-folder
type: call
call: "sharepoint.create-folder"
with:
site_id: "hr_onboarding"
folder_path: "Booksellers/{{get-employee.full_name}}_{{start_date}}"
- name: send-welcome
type: call
call: "msteams.send-message"
with:
channel_id: "store_{{store_id}}_team"
text: "Welcome {{get-employee.first_name}} to B&N store {{store_id}}! Starting {{start_date}}. Onboarding ticket: {{create-ticket.number}}."
consumes:
- type: http
namespace: peoplesoft
baseUri: "https://hr.barnesandnoble.com/psftrest/v1"
authentication:
type: basic
username: "$secrets.peoplesoft_user"
password: "$secrets.peoplesoft_password"
resources:
- name: employees
path: "/employees/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: get-employee
method: GET
- type: http
namespace: servicenow
baseUri: "https://bn.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: drive-items
path: "/{{site_id}}/drive/root:/{{folder_path}}"
inputParameters:
- name: site_id
in: path
- name: folder_path
in: path
operations:
- name: create-folder
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Processes employee termination by deactivating the account in Salesforce, creating an offboarding ticket in ServiceNow, revoking access via Azure DevOps, and notifying HR via Microsoft Teams.
naftiko: "0.5"
info:
label: "Employee Termination Pipeline"
description: "Processes employee termination by deactivating the account in Salesforce, creating an offboarding ticket in ServiceNow, revoking access via Azure DevOps, and notifying HR via Microsoft Teams."
tags:
- retail
- salesforce
- servicenow
- azure-devops
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: termination
port: 8080
tools:
- name: process-termination
description: "Orchestrate employee termination workflow."
inputParameters:
- name: employee_id
in: body
type: string
description: "Employee ID."
- name: last_day
in: body
type: string
description: "Last working day."
steps:
- name: deactivate-crm
type: call
call: "salesforce.deactivate-user"
with:
employee_id: "{{employee_id}}"
- name: create-offboarding
type: call
call: "servicenow.create-request"
with:
short_description: "Offboarding: Employee {{employee_id}}"
description: "Process offboarding for employee {{employee_id}}. Last day: {{last_day}}."
category: "hr_offboarding"
- name: revoke-access
type: call
call: "azdo.remove-user"
with:
user_id: "{{employee_id}}"
- name: notify-hr
type: call
call: "msteams.send-message"
with:
channel_id: "hr_ops"
text: "Employee {{employee_id}} offboarding initiated. Last day: {{last_day}}. ServiceNow: {{create-offboarding.request_number}}."
consumes:
- type: http
namespace: salesforce
baseUri: "https://barnesandnoble.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: users
path: "/sobjects/User/{{employee_id}}"
inputParameters:
- name: employee_id
in: path
operations:
- name: deactivate-user
method: PATCH
- type: http
namespace: servicenow
baseUri: "https://barnesandnoble.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: azdo
baseUri: "https://dev.azure.com/barnesandnoble/_apis"
authentication:
type: bearer
token: "$secrets.azdo_token"
resources:
- name: users
path: "/graph/users/{{user_id}}?api-version=7.0"
inputParameters:
- name: user_id
in: path
operations:
- name: remove-user
method: DELETE
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Generates end-of-month reports by querying Teradata for sales data, refreshing Power BI dashboards, exporting a summary to SharePoint, and emailing executives via Microsoft Outlook.
naftiko: "0.5"
info:
label: "End of Month Reporting Orchestrator"
description: "Generates end-of-month reports by querying Teradata for sales data, refreshing Power BI dashboards, exporting a summary to SharePoint, and emailing executives via Microsoft Outlook."
tags:
- retail
- teradata
- power-bi
- sharepoint
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: eom-report
port: 8080
tools:
- name: generate-eom-report
description: "Orchestrate end-of-month reporting workflow."
inputParameters:
- name: month
in: body
type: string
description: "Reporting month in YYYY-MM format."
steps:
- name: query-sales
type: call
call: "teradata.run-monthly-report"
with:
month: "{{month}}"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "bn_monthly_sales"
- name: upload-report
type: call
call: "sharepoint.upload-file"
with:
site: "bn-finance"
folder: "Monthly Reports"
file_name: "sales_report_{{month}}.xlsx"
data: "{{query-sales.export_url}}"
- name: email-executives
type: call
call: "outlook.send-email"
with:
to: "executives@barnesandnoble.com"
subject: "End of Month Sales Report - {{month}}"
body: "Monthly sales report is available. Revenue: ${{query-sales.total_revenue}}. Power BI dashboard refreshed. Report uploaded to SharePoint."
consumes:
- type: http
namespace: teradata
baseUri: "https://teradata.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: reports
path: "/queries/monthly-sales"
operations:
- name: run-monthly-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: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/sites/{{site}}/drive/root:/{{folder}}/{{file_name}}:/content"
inputParameters:
- name: site
in: path
- name: folder
in: path
- name: file_name
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Publishes a post to the Barnes and Noble Facebook page with a given message and optional link attachment.
naftiko: "0.5"
info:
label: "Facebook Page Post Publisher"
description: "Publishes a post to the Barnes and Noble Facebook page with a given message and optional link attachment."
tags:
- retail
- facebook
capability:
exposes:
- type: mcp
namespace: facebook
port: 8080
tools:
- name: publish-post
description: "Publish a post to the Facebook business page."
inputParameters:
- name: message
in: body
type: string
description: "Post message text."
- name: link
in: body
type: string
description: "Optional URL to attach."
call: "facebook.create-post"
with:
message: "{{message}}"
link: "{{link}}"
outputParameters:
- name: post_id
type: string
mapping: "$.id"
consumes:
- type: http
namespace: facebook
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.facebook_page_token"
resources:
- name: feed
path: "/me/feed"
operations:
- name: create-post
method: POST
Activates a book flash sale by reserving inventory, applying sale pricing in BigCommerce, and alerting the e-commerce team.
naftiko: "0.5"
info:
label: "Flash Sale Activation"
description: "Activates a book flash sale by reserving inventory, applying sale pricing in BigCommerce, and alerting the e-commerce team."
tags:
- retail
- flash-sale
- bigcommerce
- wms
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: flash-sales
port: 8080
tools:
- name: activate-flash-sale
description: "Reserve stock, set sale prices, and notify the team for a flash sale."
inputParameters:
- name: sale_id
in: body
type: string
description: "Sale ID."
- name: isbn_list
in: body
type: array
description: "ISBNs in the sale."
- name: discount_pct
in: body
type: number
description: "Discount percentage."
steps:
- name: reserve
type: call
call: "wms.reserve-inventory"
with:
sale_id: "{{sale_id}}"
isbns: "{{isbn_list}}"
- name: apply-pricing
type: call
call: "bigcommerce.apply-sale-pricing"
with:
isbn_list: "{{isbn_list}}"
discount_pct: "{{discount_pct}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel_id: "ecommerce"
text: "Flash sale {{sale_id}} LIVE: {{reserve.reserved_count}} titles at {{discount_pct}}% off."
consumes:
- type: http
namespace: wms
baseUri: "https://wms.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.wms_token"
resources:
- name: reservations
path: "/reservations"
operations:
- name: reserve-inventory
method: POST
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: pricing
path: "/pricelists"
operations:
- name: apply-sale-pricing
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Queries the current balance and expiration date for a Barnes & Noble gift card.
naftiko: "0.5"
info:
label: "Gift Card Balance Checker"
description: "Queries the current balance and expiration date for a Barnes & Noble gift card."
tags:
- retail
- payments
- gift-cards
capability:
exposes:
- type: mcp
namespace: gift-cards
port: 8080
tools:
- name: check-balance
description: "Look up the balance for a B&N gift card."
inputParameters:
- name: card_number
in: body
type: string
description: "Gift card number."
call: "payments.get-gift-card"
with:
card_number: "{{card_number}}"
outputParameters:
- name: balance
type: number
mapping: "$.gift_card.balance"
- name: expires_at
type: string
mapping: "$.gift_card.expires_at"
consumes:
- type: http
namespace: payments
baseUri: "https://payments.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.payments_token"
resources:
- name: gift-cards
path: "/gift-cards/{{card_number}}"
inputParameters:
- name: card_number
in: path
operations:
- name: get-gift-card
method: GET
Issues gift cards in bulk via BigCommerce for corporate promotions, logs issuance details in Google Sheets, and sends confirmation to the sales team via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Gift Card Bulk Issuance Pipeline"
description: "Issues gift cards in bulk via BigCommerce for corporate promotions, logs issuance details in Google Sheets, and sends confirmation to the sales team via Microsoft Outlook."
tags:
- retail
- bigcommerce
- google-sheets
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: bulk-gc
port: 8080
tools:
- name: issue-bulk-gift-cards
description: "Orchestrate bulk gift card issuance for corporate clients."
inputParameters:
- name: client_name
in: body
type: string
description: "Corporate client name."
- name: quantity
in: body
type: number
description: "Number of gift cards."
- name: amount
in: body
type: number
description: "Dollar amount per card."
steps:
- name: create-gift-cards
type: call
call: "bigcommerce.bulk-create-gift-cards"
with:
quantity: "{{quantity}}"
amount: "{{amount}}"
- name: log-issuance
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bn_gift_card_log"
data: "{{client_name}},{{quantity}},{{amount}},{{create-gift-cards.batch_id}}"
- name: confirm-sales
type: call
call: "outlook.send-email"
with:
to: "corporate-sales@barnesandnoble.com"
subject: "Bulk Gift Card Issuance - {{client_name}}"
body: "{{quantity}} gift cards of ${{amount}} each issued for {{client_name}}. Batch ID: {{create-gift-cards.batch_id}}."
consumes:
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: gift-cards
path: "/marketing/gift-certificates/bulk"
operations:
- name: bulk-create-gift-cards
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Pulls website traffic metrics from Google Analytics for the BN.com digital storefront.
naftiko: "0.5"
info:
label: "Google Analytics Bookstore Traffic Report"
description: "Pulls website traffic metrics from Google Analytics for the BN.com digital storefront."
tags:
- analytics
- e-commerce
- google-analytics
capability:
exposes:
- type: mcp
namespace: web-analytics
port: 8080
tools:
- name: get-traffic-report
description: "Retrieve traffic metrics for the Barnes & Noble website."
inputParameters:
- name: start_date
in: body
type: string
description: "Start date."
- name: end_date
in: body
type: string
description: "End date."
call: "ga.get-report"
with:
view_id: "bn_web"
start_date: "{{start_date}}"
end_date: "{{end_date}}"
metrics: "ga:sessions,ga:pageviews,ga:bounceRate"
outputParameters:
- name: sessions
type: number
mapping: "$.reports[0].data.totals[0].values[0]"
- name: page_views
type: number
mapping: "$.reports[0].data.totals[0].values[1]"
- name: bounce_rate
type: string
mapping: "$.reports[0].data.totals[0].values[2]"
consumes:
- type: http
namespace: ga
baseUri: "https://analyticsreporting.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/reports:batchGet"
operations:
- name: get-report
method: POST
Pulls website traffic data from Google Analytics, loads it into a Google Sheet for archiving, refreshes the Power BI dashboard, and sends the report link via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Google Analytics to Power BI Report"
description: "Pulls website traffic data from Google Analytics, loads it into a Google Sheet for archiving, refreshes the Power BI dashboard, and sends the report link via Microsoft Outlook."
tags:
- retail
- google-analytics
- google-sheets
- power-bi
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: ga-report
port: 8080
tools:
- name: generate-traffic-report
description: "Orchestrate website traffic report generation from Google Analytics to Power BI."
inputParameters:
- name: date_range
in: body
type: string
description: "Date range for the report."
steps:
- name: fetch-ga-data
type: call
call: "ga.get-report"
with:
date_range: "{{date_range}}"
metrics: "sessions,pageviews,bounceRate"
- name: archive-data
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bn_ga_archive"
data: "{{fetch-ga-data.rows}}"
- name: refresh-pbi
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "bn_web_traffic"
- name: email-report
type: call
call: "outlook.send-email"
with:
to: "marketing@barnesandnoble.com"
subject: "Website Traffic Report - {{date_range}}"
body: "Sessions: {{fetch-ga-data.total_sessions}}. Pageviews: {{fetch-ga-data.total_pageviews}}. Power BI dashboard has been refreshed."
consumes:
- type: http
namespace: ga
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/properties/{{property_id}}:runReport"
operations:
- name: get-report
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
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: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Retrieves a document from Google Drive by file ID, returning the file metadata and download link.
naftiko: "0.5"
info:
label: "Google Drive Document Retrieval"
description: "Retrieves a document from Google Drive by file ID, returning the file metadata and download link."
tags:
- retail
- google-drive
capability:
exposes:
- type: mcp
namespace: gdrive
port: 8080
tools:
- name: get-document
description: "Retrieve a Google Drive document by file ID."
inputParameters:
- name: file_id
in: body
type: string
description: "Google Drive file ID."
call: "gdrive.get-file"
with:
file_id: "{{file_id}}"
outputParameters:
- name: file_name
type: string
mapping: "$.name"
- name: mime_type
type: string
mapping: "$.mimeType"
- name: download_url
type: string
mapping: "$.webContentLink"
consumes:
- type: http
namespace: gdrive
baseUri: "https://www.googleapis.com/drive/v3"
authentication:
type: bearer
token: "$secrets.google_drive_token"
resources:
- name: files
path: "/files/{{file_id}}"
inputParameters:
- name: file_id
in: path
operations:
- name: get-file
method: GET
Appends a data row to a Google Sheets spreadsheet. Reusable logging component.
naftiko: "0.5"
info:
label: "Google Sheets Logger"
description: "Appends a data row to a Google Sheets spreadsheet. Reusable logging component."
tags:
- productivity
- google-sheets
capability:
exposes:
- type: mcp
namespace: sheets-logger
port: 8080
tools:
- name: append-row
description: "Append a row to a Google Sheets spreadsheet."
inputParameters:
- name: spreadsheet_id
in: body
type: string
description: "Spreadsheet ID."
- name: range
in: body
type: string
description: "Range."
- name: values
in: body
type: array
description: "Row values."
call: "gsheets.append-row"
with:
spreadsheet_id: "{{spreadsheet_id}}"
range: "{{range}}"
values: "{{values}}"
consumes:
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: values
path: "/{{spreadsheet_id}}/values/{{range}}:append"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: append-row
method: POST
Publishes a GTM container version for the B&N website and notifies the web team.
naftiko: "0.5"
info:
label: "Google Tag Manager Container Publisher"
description: "Publishes a GTM container version for the B&N website and notifies the web team."
tags:
- analytics
- google-tag-manager
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: tag-management
port: 8080
tools:
- name: publish-gtm-version
description: "Publish a GTM container version and notify the team."
inputParameters:
- name: container_id
in: body
type: string
description: "GTM container ID."
- name: version_id
in: body
type: string
description: "Version ID."
steps:
- name: publish
type: call
call: "gtm.publish-version"
with:
container_id: "{{container_id}}"
version_id: "{{version_id}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel_id: "web_team"
text: "GTM container {{container_id}} version {{version_id}} published."
consumes:
- type: http
namespace: gtm
baseUri: "https://www.googleapis.com/tagmanager/v2"
authentication:
type: bearer
token: "$secrets.google_tagmanager_token"
resources:
- name: versions
path: "/accounts/{{account_id}}/containers/{{container_id}}/versions/{{version_id}}:publish"
inputParameters:
- name: container_id
in: path
- name: version_id
in: path
operations:
- name: publish-version
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Publishes a new Google Tag Manager container version, validates tracking via Google Analytics, and notifies the analytics team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Google Tag Manager Deployment Pipeline"
description: "Publishes a new Google Tag Manager container version, validates tracking via Google Analytics, and notifies the analytics team via Microsoft Teams."
tags:
- retail
- google-tag-manager
- google-analytics
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: gtm-deploy
port: 8080
tools:
- name: deploy-gtm-container
description: "Orchestrate GTM container deployment with validation."
inputParameters:
- name: container_id
in: body
type: string
description: "GTM container ID."
- name: version_id
in: body
type: string
description: "Version to publish."
steps:
- name: publish-container
type: call
call: "gtm.publish-version"
with:
container_id: "{{container_id}}"
version_id: "{{version_id}}"
- name: validate-tracking
type: call
call: "ga.get-realtime"
with:
property_id: "bn_web"
- name: notify-analytics
type: call
call: "msteams.send-message"
with:
channel_id: "analytics"
text: "GTM container {{container_id}} version {{version_id}} published. Real-time active users: {{validate-tracking.active_users}}."
consumes:
- type: http
namespace: gtm
baseUri: "https://www.googleapis.com/tagmanager/v2"
authentication:
type: bearer
token: "$secrets.google_gtm_token"
resources:
- name: versions
path: "/accounts/{{account_id}}/containers/{{container_id}}/versions/{{version_id}}:publish"
inputParameters:
- name: container_id
in: path
- name: version_id
in: path
operations:
- name: publish-version
method: POST
- type: http
namespace: ga
baseUri: "https://analyticsdata.googleapis.com/v1beta"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: realtime
path: "/properties/{{property_id}}:runRealtimeReport"
operations:
- name: get-realtime
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Before the holiday season, analyzes prior year sales data from the POS, generates recommended order quantities, creates bulk purchase orders in the OMS, and emails the plan to category managers via Outlook.
naftiko: "0.5"
info:
label: "Holiday Season Inventory Planner"
description: "Before the holiday season, analyzes prior year sales data from the POS, generates recommended order quantities, creates bulk purchase orders in the OMS, and emails the plan to category managers via Outlook."
tags:
- retail
- planning
- pos
- oms
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: holiday-planning
port: 8080
tools:
- name: plan-holiday-inventory
description: "Analyze prior year data and generate holiday inventory replenishment orders."
inputParameters:
- name: category
in: body
type: string
description: "Book category."
- name: season
in: body
type: string
description: "Holiday season such as Christmas or Back-to-School."
- name: manager_email
in: body
type: string
description: "Category manager email."
steps:
- name: get-prior-sales
type: call
call: "pos.get-seasonal-analysis"
with:
category: "{{category}}"
season: "{{season}}"
- name: create-bulk-po
type: call
call: "oms.create-bulk-po"
with:
category: "{{category}}"
recommendations: "{{get-prior-sales.recommended_orders}}"
- name: email-plan
type: call
call: "outlook.send-email"
with:
to: "{{manager_email}}"
subject: "{{season}} Inventory Plan - {{category}}"
body: "{{category}} holiday plan: {{get-prior-sales.total_recommended_units}} units across {{get-prior-sales.title_count}} titles. PO batch: {{create-bulk-po.batch_id}}."
consumes:
- type: http
namespace: pos
baseUri: "https://pos.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.pos_token"
resources:
- name: seasonal-analysis
path: "/analytics/seasonal"
operations:
- name: get-seasonal-analysis
method: POST
- type: http
namespace: oms
baseUri: "https://oms.barnesandnoble.com/api/v2"
authentication:
type: bearer
token: "$secrets.oms_token"
resources:
- name: bulk-po
path: "/purchase-orders/bulk"
operations:
- name: create-bulk-po
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: send-mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Looks up a contact record in HubSpot CRM by email address, returning profile details and engagement history.
naftiko: "0.5"
info:
label: "HubSpot Contact Lookup"
description: "Looks up a contact record in HubSpot CRM by email address, returning profile details and engagement history."
tags:
- retail
- hubspot
capability:
exposes:
- type: mcp
namespace: hubspot
port: 8080
tools:
- name: lookup-contact
description: "Look up a HubSpot contact by email address."
inputParameters:
- name: email
in: body
type: string
description: "Contact email address."
call: "hubspot.get-contact"
with:
email: "{{email}}"
outputParameters:
- name: contact_id
type: string
mapping: "$.vid"
- name: first_name
type: string
mapping: "$.properties.firstname.value"
- name: last_name
type: string
mapping: "$.properties.lastname.value"
consumes:
- type: http
namespace: hubspot
baseUri: "https://api.hubapi.com"
authentication:
type: bearer
token: "$secrets.hubspot_token"
resources:
- name: contacts
path: "/contacts/v1/contact/email/{{email}}/profile"
inputParameters:
- name: email
in: path
operations:
- name: get-contact
method: GET
Monitors bookstagram hashtag engagement and posts a weekly summary to the marketing team in Microsoft Teams.
naftiko: "0.5"
info:
label: "Instagram Bookstagram Engagement Tracker"
description: "Monitors bookstagram hashtag engagement and posts a weekly summary to the marketing team in Microsoft Teams."
tags:
- marketing
- social-media
- instagram
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: bookstagram
port: 8080
tools:
- name: track-bookstagram
description: "Monitor bookstagram engagement and report to the marketing team."
inputParameters:
- name: hashtags
in: body
type: array
description: "Hashtags to track."
- name: period
in: body
type: string
description: "Reporting period."
steps:
- name: get-metrics
type: call
call: "instagram.get-hashtag-metrics"
with:
hashtags: "{{hashtags}}"
period: "{{period}}"
- name: post-summary
type: call
call: "msteams.send-message"
with:
channel_id: "marketing_social"
text: "Bookstagram weekly report: {{get-metrics.total_posts}} posts, {{get-metrics.total_engagement}} engagements across {{hashtags}}."
consumes:
- type: http
namespace: instagram
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.instagram_token"
resources:
- name: hashtag-search
path: "/ig_hashtag_search"
operations:
- name: get-hashtag-metrics
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Investigates inventory shrinkage by pulling variance data from the WMS, querying POS transactions in BigCommerce, creating a Jira investigation task, and alerting loss prevention via Microsoft Teams.
naftiko: "0.5"
info:
label: "Inventory Shrinkage Investigation Pipeline"
description: "Investigates inventory shrinkage by pulling variance data from the WMS, querying POS transactions in BigCommerce, creating a Jira investigation task, and alerting loss prevention via Microsoft Teams."
tags:
- retail
- bigcommerce
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: shrinkage
port: 8080
tools:
- name: investigate-shrinkage
description: "Orchestrate inventory shrinkage investigation."
inputParameters:
- name: store_code
in: body
type: string
description: "Store code."
- name: isbn
in: body
type: string
description: "ISBN of item with shrinkage."
steps:
- name: get-variance
type: call
call: "wms.get-variance-report"
with:
store_code: "{{store_code}}"
isbn: "{{isbn}}"
- name: get-transactions
type: call
call: "bigcommerce.get-order-history"
with:
sku: "{{isbn}}"
store_code: "{{store_code}}"
- name: create-investigation
type: call
call: "jira.create-issue"
with:
project: "LP"
summary: "Shrinkage Investigation: ISBN {{isbn}} at store {{store_code}}"
issue_type: "Task"
description: "Variance: {{get-variance.variance_units}} units. POS transactions: {{get-transactions.transaction_count}}."
- name: alert-lp
type: call
call: "msteams.send-message"
with:
channel_id: "loss_prevention"
text: "Shrinkage alert: ISBN {{isbn}} at store {{store_code}}. Variance: {{get-variance.variance_units}} units. Investigation: {{create-investigation.issue_key}}."
consumes:
- type: http
namespace: wms
baseUri: "https://wms.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.wms_token"
resources:
- name: variance
path: "/reports/variance"
operations:
- name: get-variance-report
method: GET
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: orders
path: "/orders"
operations:
- name: get-order-history
method: GET
- type: http
namespace: jira
baseUri: "https://barnesandnoble.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: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves the status, assignee, and due date for a Jira issue.
naftiko: "0.5"
info:
label: "Jira Task Status Lookup"
description: "Retrieves the status, assignee, and due date for a Jira issue."
tags:
- project-management
- jira
capability:
exposes:
- type: mcp
namespace: project-tracking
port: 8080
tools:
- name: get-jira-issue
description: "Look up a Jira issue by key."
inputParameters:
- name: issue_key
in: body
type: string
description: "Jira issue key."
call: "jira.get-issue"
with:
issue_key: "{{issue_key}}"
outputParameters:
- name: status
type: string
mapping: "$.fields.status.name"
- name: assignee
type: string
mapping: "$.fields.assignee.displayName"
- name: due_date
type: string
mapping: "$.fields.duedate"
consumes:
- type: http
namespace: jira
baseUri: "https://barnesnoble.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
Posts a bookseller or corporate job opening to LinkedIn and logs it in Google Sheets.
naftiko: "0.5"
info:
label: "LinkedIn Job Posting Publisher"
description: "Posts a bookseller or corporate job opening to LinkedIn and logs it in Google Sheets."
tags:
- hr
- recruiting
- linkedin
- google-sheets
capability:
exposes:
- type: mcp
namespace: recruiting
port: 8080
tools:
- name: post-job
description: "Publish a job opening on LinkedIn and track it."
inputParameters:
- name: title
in: body
type: string
description: "Job title."
- name: description
in: body
type: string
description: "Description."
- name: location
in: body
type: string
description: "Location."
steps:
- name: create-posting
type: call
call: "linkedin.create-job"
with:
title: "{{title}}"
description: "{{description}}"
location: "{{location}}"
company_id: "barnes-and-noble"
- name: log-posting
type: call
call: "gsheets.append-row"
with:
spreadsheet_id: "bn_recruiting"
range: "Postings!A:D"
values:
- "{{title}}"
- "{{location}}"
- "{{create-posting.id}}"
- "active"
consumes:
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: jobs
path: "/simpleJobPostings"
operations:
- name: create-job
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: values
path: "/{{spreadsheet_id}}/values/{{range}}:append"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: append-row
method: POST
Checks open positions in Jira HR project, reposts expiring job listings on LinkedIn, and notifies the recruiting team via Microsoft Teams.
naftiko: "0.5"
info:
label: "LinkedIn Job Reposting Pipeline"
description: "Checks open positions in Jira HR project, reposts expiring job listings on LinkedIn, and notifies the recruiting team via Microsoft Teams."
tags:
- retail
- jira
- linkedin
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: job-repost
port: 8080
tools:
- name: repost-expired-jobs
description: "Orchestrate LinkedIn job reposting for expiring listings."
inputParameters:
- name: days_until_expiry
in: body
type: number
description: "Repost jobs expiring within this many days."
steps:
- name: get-expiring-jobs
type: call
call: "jira.search-issues"
with:
jql: "project = HR AND status = Open AND duedate <= {{days_until_expiry}}d"
- name: repost-linkedin
type: call
call: "linkedin.create-job-post"
with:
job_data: "{{get-expiring-jobs.issues}}"
- name: notify-recruiting
type: call
call: "msteams.send-message"
with:
channel_id: "recruiting"
text: "{{get-expiring-jobs.total}} job listings reposted on LinkedIn."
consumes:
- type: http
namespace: jira
baseUri: "https://barnesandnoble.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: search
path: "/search"
operations:
- name: search-issues
method: POST
- type: http
namespace: linkedin
baseUri: "https://api.linkedin.com/v2"
authentication:
type: bearer
token: "$secrets.linkedin_token"
resources:
- name: job-posts
path: "/simpleJobPostings"
operations:
- name: create-job-post
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When the POS flags a suspicious transaction, creates a ServiceNow incident and notifies the loss prevention team.
naftiko: "0.5"
info:
label: "Loss Prevention Alert Processor"
description: "When the POS flags a suspicious transaction, creates a ServiceNow incident and notifies the loss prevention team."
tags:
- retail
- loss-prevention
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: loss-prevention
port: 8080
tools:
- name: process-lp-alert
description: "Handle a loss prevention alert."
inputParameters:
- name: transaction_id
in: body
type: string
description: "Transaction ID."
- name: store_id
in: body
type: string
description: "Store ID."
- name: alert_type
in: body
type: string
description: "Alert type."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "LP Alert: {{alert_type}} at store {{store_id}}"
category: "loss_prevention"
urgency: "1"
- name: alert-team
type: call
call: "msteams.send-message"
with:
channel_id: "loss_prevention"
text: "URGENT: {{alert_type}} at store {{store_id}}, txn {{transaction_id}}. Incident: {{create-incident.number}}"
consumes:
- type: http
namespace: servicenow
baseUri: "https://bn.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Processes a loyalty points redemption by verifying the member in Salesforce, deducting points, applying a discount in BigCommerce, and logging the transaction in Google Sheets.
naftiko: "0.5"
info:
label: "Loyalty Points Redemption Pipeline"
description: "Processes a loyalty points redemption by verifying the member in Salesforce, deducting points, applying a discount in BigCommerce, and logging the transaction in Google Sheets."
tags:
- retail
- salesforce
- bigcommerce
- google-sheets
capability:
exposes:
- type: mcp
namespace: loyalty-redeem
port: 8080
tools:
- name: redeem-points
description: "Orchestrate loyalty points redemption across systems."
inputParameters:
- name: member_id
in: body
type: string
description: "Loyalty member ID."
- name: points
in: body
type: number
description: "Points to redeem."
- name: order_id
in: body
type: string
description: "Order ID to apply discount."
steps:
- name: verify-member
type: call
call: "salesforce.get-member"
with:
member_id: "{{member_id}}"
- name: deduct-points
type: call
call: "salesforce.update-points"
with:
member_id: "{{member_id}}"
deduction: "{{points}}"
- name: apply-discount
type: call
call: "bigcommerce.apply-coupon"
with:
order_id: "{{order_id}}"
discount_amount: "{{deduct-points.dollar_value}}"
- name: log-redemption
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bn_loyalty_log"
data: "{{member_id}},{{points}},{{order_id}},{{deduct-points.dollar_value}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://barnesandnoble.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: members
path: "/sobjects/Loyalty_Member__c/{{member_id}}"
inputParameters:
- name: member_id
in: path
operations:
- name: get-member
method: GET
- name: update-points
method: PATCH
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: orders
path: "/orders/{{order_id}}/coupons"
inputParameters:
- name: order_id
in: path
operations:
- name: apply-coupon
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
Processes magazine subscription fulfillment by checking subscriber status in Salesforce, creating a shipment in the WMS, sending tracking info via Adobe Campaign, and logging in Google Sheets.
naftiko: "0.5"
info:
label: "Magazine Subscription Fulfillment Pipeline"
description: "Processes magazine subscription fulfillment by checking subscriber status in Salesforce, creating a shipment in the WMS, sending tracking info via Adobe Campaign, and logging in Google Sheets."
tags:
- retail
- salesforce
- adobe-campaign
- google-sheets
capability:
exposes:
- type: mcp
namespace: mag-fulfill
port: 8080
tools:
- name: fulfill-subscription
description: "Orchestrate magazine subscription fulfillment."
inputParameters:
- name: subscriber_id
in: body
type: string
description: "Subscriber ID."
- name: issue_id
in: body
type: string
description: "Magazine issue ID."
steps:
- name: check-subscriber
type: call
call: "salesforce.get-subscriber"
with:
subscriber_id: "{{subscriber_id}}"
- name: create-shipment
type: call
call: "wms.create-shipment"
with:
subscriber_id: "{{subscriber_id}}"
item_id: "{{issue_id}}"
address: "{{check-subscriber.shipping_address}}"
- name: send-tracking
type: call
call: "adobe-campaign.create-delivery"
with:
template: "subscription_tracking"
label: "Your magazine is on its way"
recipient_id: "{{subscriber_id}}"
- name: log-fulfillment
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bn_sub_fulfillment"
data: "{{subscriber_id}},{{issue_id}},{{create-shipment.tracking_number}}"
consumes:
- type: http
namespace: salesforce
baseUri: "https://barnesandnoble.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: subscribers
path: "/sobjects/Subscriber__c/{{subscriber_id}}"
inputParameters:
- name: subscriber_id
in: path
operations:
- name: get-subscriber
method: GET
- type: http
namespace: wms
baseUri: "https://wms.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.wms_token"
resources:
- name: shipments
path: "/shipments"
operations:
- name: create-shipment
method: POST
- type: http
namespace: adobe-campaign
baseUri: "https://mc.adobe.io/bn/campaign"
authentication:
type: bearer
token: "$secrets.adobe_campaign_token"
resources:
- name: deliveries
path: "/profileAndServicesExt/delivery"
operations:
- name: create-delivery
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
Sends an email via Microsoft Outlook. Reusable notification component.
naftiko: "0.5"
info:
label: "Microsoft Outlook Email Sender"
description: "Sends an email via Microsoft Outlook. Reusable notification component."
tags:
- collaboration
- microsoft-outlook
- email
capability:
exposes:
- type: mcp
namespace: email
port: 8080
tools:
- name: send-email
description: "Send an email via Outlook."
inputParameters:
- name: to
in: body
type: string
description: "Recipient."
- name: subject
in: body
type: string
description: "Subject."
- name: body
in: body
type: string
description: "Body."
call: "outlook.send-email"
with:
to: "{{to}}"
subject: "{{subject}}"
body: "{{body}}"
consumes:
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: send-mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Triggers a Microsoft Power Automate flow for business process automation.
naftiko: "0.5"
info:
label: "Microsoft Power Automate Flow Trigger"
description: "Triggers a Microsoft Power Automate flow for business process automation."
tags:
- automation
- microsoft-power-automate
capability:
exposes:
- type: mcp
namespace: workflow-automation
port: 8080
tools:
- name: trigger-flow
description: "Trigger a Power Automate flow."
inputParameters:
- name: flow_id
in: body
type: string
description: "Flow ID."
- name: payload
in: body
type: object
description: "Flow input payload."
call: "power-automate.trigger-flow"
with:
flow_id: "{{flow_id}}"
body: "{{payload}}"
outputParameters:
- name: run_id
type: string
mapping: "$.id"
consumes:
- type: http
namespace: power-automate
baseUri: "https://api.flow.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.power_automate_token"
resources:
- name: flows
path: "/flows/{{flow_id}}/triggers/manual/run"
inputParameters:
- name: flow_id
in: path
operations:
- name: trigger-flow
method: POST
Sends a message to a Microsoft Teams channel. Reusable notification building block.
naftiko: "0.5"
info:
label: "Microsoft Teams Channel Notifier"
description: "Sends a message to a Microsoft Teams channel. Reusable notification building block."
tags:
- collaboration
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: teams-messaging
port: 8080
tools:
- name: send-channel-message
description: "Post a message to a Teams channel."
inputParameters:
- name: channel_id
in: body
type: string
description: "Channel ID."
- name: text
in: body
type: string
description: "Message text."
call: "msteams.send-message"
with:
channel_id: "{{channel_id}}"
text: "{{text}}"
consumes:
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a new book release is scheduled, creates the product listing in BigCommerce, syncs inventory with the warehouse, schedules a promotional email via Adobe Campaign, and posts an announcement to Instagram and the store operations Microsoft Teams channel.
naftiko: "0.5"
info:
label: "New Book Release Launch Orchestrator"
description: "When a new book release is scheduled, creates the product listing in BigCommerce, syncs inventory with the warehouse, schedules a promotional email via Adobe Campaign, and posts an announcement to Instagram and the store operations Microsoft Teams channel."
tags:
- retail
- publishing
- bigcommerce
- adobe-campaign
- instagram
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: book-launch
port: 8080
tools:
- name: launch-book-release
description: "Orchestrate a new book release across e-commerce, email, social, and store operations."
inputParameters:
- name: isbn
in: body
type: string
description: "Book ISBN."
- name: title
in: body
type: string
description: "Book title."
- name: release_date
in: body
type: string
description: "Release date in YYYY-MM-DD format."
- name: author
in: body
type: string
description: "Author name."
steps:
- name: create-listing
type: call
call: "bigcommerce.create-product"
with:
isbn: "{{isbn}}"
name: "{{title}}"
availability_date: "{{release_date}}"
- name: sync-inventory
type: call
call: "wms.sync-isbn"
with:
isbn: "{{isbn}}"
warehouse: "bn_main_dc"
- name: schedule-email
type: call
call: "adobe-campaign.create-delivery"
with:
template: "new_release"
label: "New Release: {{title}} by {{author}}"
scheduled_date: "{{release_date}}"
- name: post-social
type: call
call: "instagram.create-post"
with:
caption: "Coming {{release_date}}: {{title}} by {{author}}. Pre-order now at Barnes & Noble! #BNReads #NewRelease"
media_url: "{{create-listing.cover_image_url}}"
- name: notify-stores
type: call
call: "msteams.send-message"
with:
channel_id: "store_ops"
text: "New release: {{title}} by {{author}} on {{release_date}}. ISBN: {{isbn}}. Prepare displays."
consumes:
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: products
path: "/catalog/products"
operations:
- name: create-product
method: POST
- type: http
namespace: wms
baseUri: "https://wms.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.wms_token"
resources:
- name: inventory-sync
path: "/isbn/{{isbn}}/sync"
inputParameters:
- name: isbn
in: path
operations:
- name: sync-isbn
method: POST
- type: http
namespace: adobe-campaign
baseUri: "https://mc.adobe.io/bn/campaign"
authentication:
type: bearer
token: "$secrets.adobe_campaign_token"
resources:
- name: deliveries
path: "/profileAndServicesExt/delivery"
operations:
- name: create-delivery
method: POST
- type: http
namespace: instagram
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.instagram_token"
resources:
- name: media
path: "/me/media"
operations:
- name: create-post
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When New Relic fires an error rate alert, creates a ServiceNow incident and notifies the SRE team in Microsoft Teams.
naftiko: "0.5"
info:
label: "New Relic Error Rate Alert Handler"
description: "When New Relic fires an error rate alert, creates a ServiceNow incident and notifies the SRE team in Microsoft Teams."
tags:
- monitoring
- new-relic
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: error-alerting
port: 8080
tools:
- name: handle-error-alert
description: "Process a New Relic error rate alert through incident management."
inputParameters:
- name: alert_id
in: body
type: string
description: "Alert ID."
- name: condition_name
in: body
type: string
description: "Alert condition."
steps:
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Error rate alert: {{condition_name}}"
category: "application"
urgency: "2"
- name: notify-sre
type: call
call: "msteams.send-message"
with:
channel_id: "sre_alerts"
text: "Error rate alert: {{condition_name}}. Incident: {{create-incident.number}}."
consumes:
- type: http
namespace: servicenow
baseUri: "https://bn.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a New Relic alert fires, retrieves the violation details, creates a ServiceNow incident, and posts an alert to the engineering Microsoft Teams channel.
naftiko: "0.5"
info:
label: "New Relic to ServiceNow Incident Pipeline"
description: "When a New Relic alert fires, retrieves the violation details, creates a ServiceNow incident, and posts an alert to the engineering Microsoft Teams channel."
tags:
- retail
- new-relic
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: nr-incident
port: 8080
tools:
- name: process-new-relic-alert
description: "Orchestrate New Relic alert to ServiceNow incident creation."
inputParameters:
- name: violation_id
in: body
type: string
description: "New Relic violation ID."
steps:
- name: get-violation
type: call
call: "newrelic.get-violation"
with:
violation_id: "{{violation_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "New Relic Alert: {{get-violation.condition_name}}"
description: "Violation: {{get-violation.label}}. Entity: {{get-violation.entity_name}}. Duration: {{get-violation.duration}} min."
urgency: "2"
- name: alert-engineering
type: call
call: "msteams.send-message"
with:
channel_id: "engineering"
text: "New Relic alert: {{get-violation.condition_name}} on {{get-violation.entity_name}}. SNOW incident: {{create-incident.incident_number}}."
consumes:
- type: http
namespace: newrelic
baseUri: "https://api.newrelic.com/v2"
authentication:
type: apiKey
key: "$secrets.newrelic_api_key"
resources:
- name: violations
path: "/alerts_violations/{{violation_id}}.json"
inputParameters:
- name: violation_id
in: path
operations:
- name: get-violation
method: GET
- type: http
namespace: servicenow
baseUri: "https://barnesandnoble.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Provisions a new store by creating location records in Oracle EBS, setting up a POS profile in BigCommerce, creating a ServiceNow configuration item, and notifying operations via Microsoft Teams.
naftiko: "0.5"
info:
label: "New Store Setup Orchestrator"
description: "Provisions a new store by creating location records in Oracle EBS, setting up a POS profile in BigCommerce, creating a ServiceNow configuration item, and notifying operations via Microsoft Teams."
tags:
- retail
- oracle-e-business-suite
- bigcommerce
- servicenow
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: new-store
port: 8080
tools:
- name: setup-store
description: "Orchestrate new store provisioning across all systems."
inputParameters:
- name: store_name
in: body
type: string
description: "Store name."
- name: store_code
in: body
type: string
description: "Store code."
- name: address
in: body
type: string
description: "Store address."
steps:
- name: create-location
type: call
call: "oracle-ebs.create-location"
with:
store_name: "{{store_name}}"
store_code: "{{store_code}}"
address: "{{address}}"
- name: create-pos-profile
type: call
call: "bigcommerce.create-channel"
with:
name: "{{store_name}} POS"
type: "pos"
store_code: "{{store_code}}"
- name: create-ci
type: call
call: "servicenow.create-ci"
with:
name: "Store - {{store_name}}"
category: "retail_location"
location: "{{address}}"
- name: notify-ops
type: call
call: "msteams.send-message"
with:
channel_id: "store_ops"
text: "New store provisioned: {{store_name}} ({{store_code}}). ERP location, POS profile, and CMDB entry created."
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://erp.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_ebs_token"
resources:
- name: locations
path: "/locations"
operations:
- name: create-location
method: POST
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: channels
path: "/channels"
operations:
- name: create-channel
method: POST
- type: http
namespace: servicenow
baseUri: "https://barnesandnoble.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: cmdb
path: "/table/cmdb_ci"
operations:
- name: create-ci
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When a new e-book is ready for Nook, uploads the content file to Amazon S3, creates the product listing in BigCommerce, and sends a notification to the digital content team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Nook Content Publishing Pipeline"
description: "When a new e-book is ready for Nook, uploads the content file to Amazon S3, creates the product listing in BigCommerce, and sends a notification to the digital content team via Microsoft Teams."
tags:
- retail
- amazon-s3
- bigcommerce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: nook-publish
port: 8080
tools:
- name: publish-ebook
description: "Orchestrate e-book publishing to the Nook platform."
inputParameters:
- name: isbn
in: body
type: string
description: "E-book ISBN."
- name: title
in: body
type: string
description: "E-book title."
- name: file_url
in: body
type: string
description: "Source file URL."
steps:
- name: upload-content
type: call
call: "s3.put-object"
with:
bucket: "bn-nook-content"
key: "ebooks/{{isbn}}.epub"
source_url: "{{file_url}}"
- name: create-listing
type: call
call: "bigcommerce.create-product"
with:
name: "{{title}} (Nook)"
sku: "NOOK-{{isbn}}"
type: "digital"
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "digital_content"
text: "New Nook e-book published: {{title}} (ISBN: {{isbn}}). Listing ID: {{create-listing.product_id}}"
consumes:
- type: http
namespace: s3
baseUri: "https://s3.amazonaws.com"
authentication:
type: aws-sigv4
accessKeyId: "$secrets.aws_access_key"
secretAccessKey: "$secrets.aws_secret_key"
resources:
- name: objects
path: "/{{bucket}}/{{key}}"
inputParameters:
- name: bucket
in: path
- name: key
in: path
operations:
- name: put-object
method: PUT
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/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: channel_id
in: path
operations:
- name: send-message
method: POST
When a new e-book is published, syncs the digital catalog with the Nook platform, updates availability in BigCommerce, and notifies the digital content team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Nook E-Reader Content Sync"
description: "When a new e-book is published, syncs the digital catalog with the Nook platform, updates availability in BigCommerce, and notifies the digital content team via Microsoft Teams."
tags:
- retail
- publishing
- e-books
- bigcommerce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: nook-content
port: 8080
tools:
- name: sync-ebook
description: "Sync a new e-book to the Nook platform and update the online store."
inputParameters:
- name: isbn
in: body
type: string
description: "E-book ISBN."
- name: title
in: body
type: string
description: "Book title."
- name: format
in: body
type: string
description: "Digital format such as epub or pdf."
steps:
- name: publish-nook
type: call
call: "nook.publish-ebook"
with:
isbn: "{{isbn}}"
format: "{{format}}"
- name: update-bigcommerce
type: call
call: "bigcommerce.update-product"
with:
isbn: "{{isbn}}"
nook_available: true
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "digital_content"
text: "E-book {{title}} ({{isbn}}) now available on Nook in {{format}} format."
consumes:
- type: http
namespace: nook
baseUri: "https://nook-api.barnesandnoble.com/v1"
authentication:
type: bearer
token: "$secrets.nook_token"
resources:
- name: ebooks
path: "/ebooks"
operations:
- name: publish-ebook
method: POST
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: products
path: "/catalog/products"
operations:
- name: update-product
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
When an online order is placed, evaluates inventory at the DC and nearby stores, selects the optimal fulfillment source, and routes through the OMS.
naftiko: "0.5"
info:
label: "Omnichannel Fulfillment Router"
description: "When an online order is placed, evaluates inventory at the DC and nearby stores, selects the optimal fulfillment source, and routes through the OMS."
tags:
- retail
- fulfillment
- omnichannel
- oms
- wms
capability:
exposes:
- type: mcp
namespace: fulfillment
port: 8080
tools:
- name: route-order
description: "Determine the best fulfillment source and route the order."
inputParameters:
- name: order_id
in: body
type: string
description: "Order ID."
- name: customer_zip
in: body
type: string
description: "Customer ZIP."
steps:
- name: get-order
type: call
call: "bigcommerce.get-order"
with:
order_id: "{{order_id}}"
- name: check-dc
type: call
call: "wms.check-availability"
with:
isbns: "{{get-order.isbn_list}}"
location: "main_dc"
- name: check-stores
type: call
call: "wms.find-nearest-stock"
with:
isbns: "{{get-order.isbn_list}}"
zip: "{{customer_zip}}"
- name: assign
type: call
call: "oms.assign-fulfillment"
with:
order_id: "{{order_id}}"
dc_available: "{{check-dc.available}}"
store_id: "{{check-stores.store_id}}"
consumes:
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v2"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: orders
path: "/orders/{{order_id}}"
inputParameters:
- name: order_id
in: path
operations:
- name: get-order
method: GET
- type: http
namespace: wms
baseUri: "https://wms.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.wms_token"
resources:
- name: availability
path: "/inventory/availability"
operations:
- name: check-availability
method: POST
- name: find-nearest-stock
method: POST
- type: http
namespace: oms
baseUri: "https://oms.barnesandnoble.com/api/v2"
authentication:
type: bearer
token: "$secrets.oms_token"
resources:
- name: fulfillment
path: "/orders/{{order_id}}/fulfillment"
inputParameters:
- name: order_id
in: path
operations:
- name: assign-fulfillment
method: POST
Looks up a book vendor purchase order in Oracle EBS and returns approval status and total.
naftiko: "0.5"
info:
label: "Oracle E-Business Suite Purchase Order Status"
description: "Looks up a book vendor purchase order in Oracle EBS and returns approval status and total."
tags:
- procurement
- erp
- oracle-e-business-suite
capability:
exposes:
- type: mcp
namespace: procurement
port: 8080
tools:
- name: get-po-status
description: "Look up a purchase order from Oracle EBS."
inputParameters:
- name: po_number
in: body
type: string
description: "PO number."
call: "oracle-ebs.get-po"
with:
po_number: "{{po_number}}"
outputParameters:
- name: status
type: string
mapping: "$.AUTHORIZATION_STATUS"
- name: vendor
type: string
mapping: "$.VENDOR_NAME"
- name: total
type: number
mapping: "$.TOTAL_AMOUNT"
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://erp.barnesandnoble.com/webservices/rest/v1"
authentication:
type: basic
username: "$secrets.oracle_ebs_user"
password: "$secrets.oracle_ebs_password"
resources:
- name: purchase-orders
path: "/purchaseOrders/{{po_number}}"
inputParameters:
- name: po_number
in: path
operations:
- name: get-po
method: GET
Queries Oracle E-Business Suite for supplier information by supplier name or ID, returning vendor details and payment terms.
naftiko: "0.5"
info:
label: "Oracle E-Business Suite Supplier Lookup"
description: "Queries Oracle E-Business Suite for supplier information by supplier name or ID, returning vendor details and payment terms."
tags:
- retail
- oracle-e-business-suite
capability:
exposes:
- type: mcp
namespace: oracle-ebs
port: 8080
tools:
- name: get-supplier
description: "Look up supplier details in Oracle EBS."
inputParameters:
- name: supplier_id
in: body
type: string
description: "Supplier ID."
call: "oracle-ebs.get-vendor"
with:
supplier_id: "{{supplier_id}}"
outputParameters:
- name: vendor_name
type: string
mapping: "$.data.vendor_name"
- name: payment_terms
type: string
mapping: "$.data.payment_terms"
- name: status
type: string
mapping: "$.data.vendor_status"
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://erp.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_ebs_token"
resources:
- name: suppliers
path: "/suppliers/{{supplier_id}}"
inputParameters:
- name: supplier_id
in: path
operations:
- name: get-vendor
method: GET
Pulls end-of-day register totals, compares against expected values, and flags variances in ServiceNow.
naftiko: "0.5"
info:
label: "POS Daily Reconciliation"
description: "Pulls end-of-day register totals, compares against expected values, and flags variances in ServiceNow."
tags:
- retail
- finance
- pos
- servicenow
capability:
exposes:
- type: mcp
namespace: pos-reconciliation
port: 8080
tools:
- name: reconcile-pos
description: "Reconcile daily POS totals and flag discrepancies."
inputParameters:
- name: store_id
in: body
type: string
description: "Store ID."
- name: date
in: body
type: string
description: "Business date."
steps:
- name: get-totals
type: call
call: "pos.get-register-summary"
with:
store_id: "{{store_id}}"
date: "{{date}}"
- name: flag-variance
type: call
call: "servicenow.create-incident"
with:
short_description: "POS variance at store {{store_id}} on {{date}}"
category: "finance"
description: "Variance: ${{get-totals.variance}}."
consumes:
- type: http
namespace: pos
baseUri: "https://pos.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.pos_token"
resources:
- name: register-summary
path: "/stores/{{store_id}}/registers/summary/{{date}}"
inputParameters:
- name: store_id
in: path
- name: date
in: path
operations:
- name: get-register-summary
method: GET
- type: http
namespace: servicenow
baseUri: "https://bn.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
Triggers a Power BI dataset refresh for the B&N sales dashboard and notifies the analytics team.
naftiko: "0.5"
info:
label: "Power BI Sales Dashboard Refresh"
description: "Triggers a Power BI dataset refresh for the B&N sales dashboard and notifies the analytics team."
tags:
- analytics
- power-bi
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: bi-refresh
port: 8080
tools:
- name: refresh-dashboard
description: "Trigger a Power BI refresh and notify the team."
inputParameters:
- name: dataset_id
in: body
type: string
description: "Power BI dataset ID."
steps:
- name: refresh
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "{{dataset_id}}"
- name: notify
type: call
call: "msteams.send-message"
with:
channel_id: "analytics"
text: "Power BI dashboard refresh triggered for dataset {{dataset_id}}."
consumes:
- 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: channel_id
in: path
operations:
- name: send-message
method: POST
Executes a price markdown by updating product prices in BigCommerce, adjusting inventory valuation in Oracle EBS, refreshing the Power BI sales dashboard, and notifying the pricing team via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Price Markdown Execution Pipeline"
description: "Executes a price markdown by updating product prices in BigCommerce, adjusting inventory valuation in Oracle EBS, refreshing the Power BI sales dashboard, and notifying the pricing team via Microsoft Outlook."
tags:
- retail
- bigcommerce
- oracle-e-business-suite
- power-bi
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: markdown
port: 8080
tools:
- name: execute-markdown
description: "Orchestrate price markdown across e-commerce and ERP systems."
inputParameters:
- name: product_ids
in: body
type: array
description: "List of product IDs to mark down."
- name: discount_percent
in: body
type: number
description: "Discount percentage."
steps:
- name: update-prices
type: call
call: "bigcommerce.batch-update-prices"
with:
product_ids: "{{product_ids}}"
discount_percent: "{{discount_percent}}"
- name: update-valuation
type: call
call: "oracle-ebs.adjust-inventory-value"
with:
product_ids: "{{product_ids}}"
adjustment_percent: "{{discount_percent}}"
- name: refresh-dashboard
type: call
call: "powerbi.refresh-dataset"
with:
dataset_id: "bn_sales_dashboard"
- name: notify-pricing
type: call
call: "outlook.send-email"
with:
to: "pricing@barnesandnoble.com"
subject: "Markdown Executed: {{discount_percent}}% off"
body: "Price markdown of {{discount_percent}}% applied to {{update-prices.updated_count}} products. Dashboard refreshed."
consumes:
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: products
path: "/catalog/products"
operations:
- name: batch-update-prices
method: PUT
- type: http
namespace: oracle-ebs
baseUri: "https://erp.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_ebs_token"
resources:
- name: inventory
path: "/inventory/valuation"
operations:
- name: adjust-inventory-value
method: PATCH
- 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: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Fetches new product reviews from BigCommerce, runs sentiment analysis, flags negative reviews in a Jira ticket, and updates the review status via the BigCommerce API.
naftiko: "0.5"
info:
label: "Product Review Moderation Pipeline"
description: "Fetches new product reviews from BigCommerce, runs sentiment analysis, flags negative reviews in a Jira ticket, and updates the review status via the BigCommerce API."
tags:
- retail
- bigcommerce
- jira
capability:
exposes:
- type: mcp
namespace: review-mod
port: 8080
tools:
- name: moderate-reviews
description: "Orchestrate product review moderation and flagging."
inputParameters:
- name: since_date
in: body
type: string
description: "Date to fetch reviews from."
steps:
- name: fetch-reviews
type: call
call: "bigcommerce.get-reviews"
with:
since_date: "{{since_date}}"
- name: flag-negative
type: call
call: "jira.create-issue"
with:
project: "CS"
summary: "Negative product reviews flagged since {{since_date}}"
issue_type: "Task"
description: "{{fetch-reviews.negative_count}} negative reviews require attention."
- name: update-status
type: call
call: "bigcommerce.batch-approve-reviews"
with:
review_ids: "{{fetch-reviews.approved_ids}}"
consumes:
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: reviews
path: "/catalog/products/reviews"
operations:
- name: get-reviews
method: GET
- name: batch-approve-reviews
method: PUT
- type: http
namespace: jira
baseUri: "https://barnesandnoble.atlassian.net/rest/api/3"
authentication:
type: bearer
token: "$secrets.jira_token"
resources:
- name: issues
path: "/issue"
operations:
- name: create-issue
method: POST
Ingests new title data from a publisher catalog feed, creates or updates product entries in BigCommerce, syncs with the warehouse, and notifies the buying team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Publisher Catalog Sync Pipeline"
description: "Ingests new title data from a publisher catalog feed, creates or updates product entries in BigCommerce, syncs with the warehouse, and notifies the buying team via Microsoft Teams."
tags:
- retail
- publishing
- bigcommerce
- wms
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: publisher-sync
port: 8080
tools:
- name: sync-publisher-catalog
description: "Ingest new titles from a publisher and propagate across systems."
inputParameters:
- name: publisher_id
in: body
type: string
description: "Publisher identifier."
- name: catalog_url
in: body
type: string
description: "URL of the publisher catalog feed."
steps:
- name: fetch-catalog
type: call
call: "publisher.fetch-catalog"
with:
publisher_id: "{{publisher_id}}"
url: "{{catalog_url}}"
- name: upsert-products
type: call
call: "bigcommerce.upsert-products"
with:
products: "{{fetch-catalog.titles}}"
- name: sync-warehouse
type: call
call: "wms.bulk-sync"
with:
isbns: "{{fetch-catalog.isbn_list}}"
- name: notify-buyers
type: call
call: "msteams.send-message"
with:
channel_id: "buying_team"
text: "Publisher {{publisher_id}} catalog synced: {{fetch-catalog.new_titles}} new titles, {{fetch-catalog.updated_titles}} updated."
consumes:
- type: http
namespace: publisher
baseUri: "https://publishers.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.publisher_token"
resources:
- name: catalogs
path: "/publishers/{{publisher_id}}/catalog"
inputParameters:
- name: publisher_id
in: path
operations:
- name: fetch-catalog
method: GET
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: products
path: "/catalog/products"
operations:
- name: upsert-products
method: PUT
- type: http
namespace: wms
baseUri: "https://wms.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.wms_token"
resources:
- name: bulk-sync
path: "/inventory/bulk-sync"
operations:
- name: bulk-sync
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Pulls reading challenge progress from the CRM, computes leaderboard rankings, and posts weekly standings to the B&N Facebook community page.
naftiko: "0.5"
info:
label: "Reading Challenge Leaderboard Updater"
description: "Pulls reading challenge progress from the CRM, computes leaderboard rankings, and posts weekly standings to the B&N Facebook community page."
tags:
- retail
- community
- crm
- facebook
capability:
exposes:
- type: mcp
namespace: reading-challenge
port: 8080
tools:
- name: update-leaderboard
description: "Compute reading challenge standings and post to social."
inputParameters:
- name: challenge_id
in: body
type: string
description: "Reading challenge ID."
- name: week_number
in: body
type: number
description: "Current week number."
steps:
- name: get-progress
type: call
call: "crm.get-challenge-progress"
with:
challenge_id: "{{challenge_id}}"
- name: post-standings
type: call
call: "facebook.create-post"
with:
text: "Week {{week_number}} Reading Challenge Update! {{get-progress.total_participants}} readers, {{get-progress.total_books_read}} books completed. Top reader: {{get-progress.leader_name}} with {{get-progress.leader_count}} books! #BNReadingChallenge"
consumes:
- type: http
namespace: crm
baseUri: "https://crm.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.crm_token"
resources:
- name: challenges
path: "/challenges/{{challenge_id}}/progress"
inputParameters:
- name: challenge_id
in: path
operations:
- name: get-challenge-progress
method: GET
- type: http
namespace: facebook
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.facebook_token"
resources:
- name: posts
path: "/me/feed"
operations:
- name: create-post
method: POST
Processes book returns to vendor by creating an RMA in Oracle EBS, scheduling a pickup in the WMS, notifying the vendor via Microsoft Outlook, and logging in Google Sheets.
naftiko: "0.5"
info:
label: "Returns to Vendor Pipeline"
description: "Processes book returns to vendor by creating an RMA in Oracle EBS, scheduling a pickup in the WMS, notifying the vendor via Microsoft Outlook, and logging in Google Sheets."
tags:
- retail
- oracle-e-business-suite
- google-sheets
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: vendor-return
port: 8080
tools:
- name: process-vendor-return
description: "Orchestrate vendor return processing."
inputParameters:
- name: vendor_id
in: body
type: string
description: "Vendor ID."
- name: isbn_list
in: body
type: array
description: "List of ISBNs to return."
steps:
- name: create-rma
type: call
call: "oracle-ebs.create-rma"
with:
vendor_id: "{{vendor_id}}"
items: "{{isbn_list}}"
- name: schedule-pickup
type: call
call: "wms.schedule-pickup"
with:
rma_number: "{{create-rma.rma_number}}"
items: "{{isbn_list}}"
- name: notify-vendor
type: call
call: "outlook.send-email"
with:
to: "{{create-rma.vendor_email}}"
subject: "Return Authorization: {{create-rma.rma_number}}"
body: "RMA {{create-rma.rma_number}} has been created. Pickup scheduled for {{schedule-pickup.pickup_date}}."
- name: log-return
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bn_vendor_returns"
data: "{{vendor_id}},{{create-rma.rma_number}},{{schedule-pickup.pickup_date}}"
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://erp.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_ebs_token"
resources:
- name: rma
path: "/return-authorizations"
operations:
- name: create-rma
method: POST
- type: http
namespace: wms
baseUri: "https://wms.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.wms_token"
resources:
- name: pickups
path: "/pickups"
operations:
- name: schedule-pickup
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
Retrieves a B&N customer contact record from Salesforce.
naftiko: "0.5"
info:
label: "Salesforce Contact Lookup"
description: "Retrieves a B&N customer contact record from Salesforce."
tags:
- crm
- salesforce
capability:
exposes:
- type: mcp
namespace: crm
port: 8080
tools:
- name: get-contact
description: "Look up a customer contact in Salesforce."
inputParameters:
- name: contact_id
in: body
type: string
description: "Salesforce contact ID."
call: "salesforce.get-contact"
with:
contact_id: "{{contact_id}}"
outputParameters:
- name: name
type: string
mapping: "$.Name"
- name: email
type: string
mapping: "$.Email"
consumes:
- type: http
namespace: salesforce
baseUri: "https://bn.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: contacts
path: "/sobjects/Contact/{{contact_id}}"
inputParameters:
- name: contact_id
in: path
operations:
- name: get-contact
method: GET
Retrieves a Barnes & Noble membership profile including member tier, expiration, and discount status.
naftiko: "0.5"
info:
label: "Salesforce Membership Lookup"
description: "Retrieves a Barnes & Noble membership profile including member tier, expiration, and discount status."
tags:
- crm
- salesforce
- membership
capability:
exposes:
- type: mcp
namespace: membership
port: 8080
tools:
- name: get-membership
description: "Look up a B&N membership by contact ID."
inputParameters:
- name: contact_id
in: body
type: string
description: "Salesforce contact ID."
call: "salesforce.get-membership"
with:
contact_id: "{{contact_id}}"
outputParameters:
- name: tier
type: string
mapping: "$.Membership_Tier__c"
- name: expiration
type: string
mapping: "$.Membership_Expiration__c"
- name: discount_pct
type: number
mapping: "$.Member_Discount__c"
consumes:
- type: http
namespace: salesforce
baseUri: "https://bn.my.salesforce.com/services/data/v59.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: memberships
path: "/sobjects/Contact/{{contact_id}}?fields=Membership_Tier__c,Membership_Expiration__c,Member_Discount__c"
inputParameters:
- name: contact_id
in: path
operations:
- name: get-membership
method: GET
Processes a school bulk textbook order by creating the order in BigCommerce, generating a purchase order in Oracle EBS, sending confirmation to the school contact via Microsoft Outlook, and notifying fulfillment via Microsoft Teams.
naftiko: "0.5"
info:
label: "School Bulk Order Pipeline"
description: "Processes a school bulk textbook order by creating the order in BigCommerce, generating a purchase order in Oracle EBS, sending confirmation to the school contact via Microsoft Outlook, and notifying fulfillment via Microsoft Teams."
tags:
- retail
- bigcommerce
- oracle-e-business-suite
- microsoft-outlook
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: school-order
port: 8080
tools:
- name: process-school-order
description: "Orchestrate school bulk textbook order processing."
inputParameters:
- name: school_name
in: body
type: string
description: "School name."
- name: contact_email
in: body
type: string
description: "School contact email."
- name: items
in: body
type: array
description: "List of ISBNs and quantities."
steps:
- name: create-order
type: call
call: "bigcommerce.create-order"
with:
customer_name: "{{school_name}}"
items: "{{items}}"
order_type: "bulk"
- name: create-po
type: call
call: "oracle-ebs.create-purchase-order"
with:
vendor: "{{school_name}}"
items: "{{items}}"
reference: "{{create-order.order_id}}"
- name: confirm-school
type: call
call: "outlook.send-email"
with:
to: "{{contact_email}}"
subject: "Barnes & Noble Bulk Order Confirmation - {{create-order.order_id}}"
body: "Your bulk order has been confirmed. Order ID: {{create-order.order_id}}. We will notify you when it ships."
- name: notify-fulfillment
type: call
call: "msteams.send-message"
with:
channel_id: "fulfillment"
text: "School bulk order received: {{school_name}}. Order: {{create-order.order_id}}. PO: {{create-po.po_number}}."
consumes:
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: orders
path: "/orders"
operations:
- name: create-order
method: POST
- type: http
namespace: oracle-ebs
baseUri: "https://erp.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_ebs_token"
resources:
- name: purchase-orders
path: "/purchase-orders"
operations:
- name: create-purchase-order
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Coordinates a seasonal display changeover by generating planograms from the merchandising system, assigning tasks in Jira for each store, and sending instructions to store managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Seasonal Display Changeover Orchestrator"
description: "Coordinates a seasonal display changeover by generating planograms from the merchandising system, assigning tasks in Jira for each store, and sending instructions to store managers via Microsoft Teams."
tags:
- retail
- jira
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: display-changeover
port: 8080
tools:
- name: execute-changeover
description: "Orchestrate seasonal display changeover across stores."
inputParameters:
- name: season
in: body
type: string
description: "Season name."
- name: effective_date
in: body
type: string
description: "Changeover effective date."
steps:
- name: create-tasks
type: call
call: "jira.create-issue"
with:
project: "STORE"
summary: "{{season}} Display Changeover - Effective {{effective_date}}"
issue_type: "Task"
description: "Execute seasonal display changeover for {{season}}. All displays must be updated by {{effective_date}}."
- name: notify-managers
type: call
call: "msteams.send-message"
with:
channel_id: "store_ops"
text: "Seasonal display changeover initiated for {{season}}. Effective date: {{effective_date}}. Jira task: {{create-tasks.issue_key}}. Please update all displays per planogram."
consumes:
- type: http
namespace: jira
baseUri: "https://barnesandnoble.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: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Runs a PCI compliance check by querying Splunk for security events, verifying Palo Alto Networks firewall rules, generating a compliance report in SharePoint, and alerting the security team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Security Audit Compliance Pipeline"
description: "Runs a PCI compliance check by querying Splunk for security events, verifying Palo Alto Networks firewall rules, generating a compliance report in SharePoint, and alerting the security team via Microsoft Teams."
tags:
- retail
- splunk
- palo-alto-networks
- sharepoint
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: security-audit
port: 8080
tools:
- name: run-security-audit
description: "Orchestrate PCI security audit compliance checks."
inputParameters:
- name: audit_period
in: body
type: string
description: "Audit period."
steps:
- name: query-security-events
type: call
call: "splunk.search-security"
with:
query: "index=security sourcetype=pci_audit earliest=-30d"
- name: check-firewall
type: call
call: "paloalto.get-security-rules"
with:
policy_type: "pci"
- name: upload-report
type: call
call: "sharepoint.upload-file"
with:
site: "bn-security"
folder: "Audit Reports"
file_name: "pci_audit_{{audit_period}}.pdf"
- name: notify-security
type: call
call: "msteams.send-message"
with:
channel_id: "security"
text: "PCI security audit complete for {{audit_period}}. Events analyzed: {{query-security-events.event_count}}. Firewall rules verified: {{check-firewall.rule_count}}. Report uploaded to SharePoint."
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.barnesandnoble.com:8089"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search
path: "/services/search/jobs"
operations:
- name: search-security
method: POST
- type: http
namespace: paloalto
baseUri: "https://firewall.barnesandnoble.com/restapi/v10.1"
authentication:
type: apiKey
key: "$secrets.paloalto_api_key"
resources:
- name: security-rules
path: "/Policies/SecurityRules"
operations:
- name: get-security-rules
method: GET
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/sites/{{site}}/drive/root:/{{folder}}/{{file_name}}:/content"
inputParameters:
- name: site
in: path
- name: folder
in: path
- name: file_name
in: path
operations:
- name: upload-file
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Retrieves the current state and assignment for a ServiceNow incident by number.
naftiko: "0.5"
info:
label: "ServiceNow Incident Status Lookup"
description: "Retrieves the current state and assignment for a ServiceNow incident by number."
tags:
- it-support
- servicenow
capability:
exposes:
- type: mcp
namespace: it-support
port: 8080
tools:
- name: get-incident-status
description: "Look up a ServiceNow incident."
inputParameters:
- name: incident_number
in: body
type: string
description: "Incident number."
call: "servicenow.get-incident"
with:
incident_number: "{{incident_number}}"
outputParameters:
- name: state
type: string
mapping: "$.result.state"
- name: priority
type: string
mapping: "$.result.priority"
- name: assigned_group
type: string
mapping: "$.result.assignment_group.display_value"
consumes:
- type: http
namespace: servicenow
baseUri: "https://bn.service-now.com/api/now"
authentication:
type: basic
username: "$secrets.servicenow_user"
password: "$secrets.servicenow_password"
resources:
- name: incidents
path: "/table/incident?sysparm_query=number={{incident_number}}"
inputParameters:
- name: incident_number
in: path
operations:
- name: get-incident
method: GET
Retrieves a document from a SharePoint site by path.
naftiko: "0.5"
info:
label: "SharePoint Document Retrieval"
description: "Retrieves a document from a SharePoint site by path."
tags:
- collaboration
- sharepoint
capability:
exposes:
- type: mcp
namespace: documents
port: 8080
tools:
- name: get-document
description: "Retrieve a document from SharePoint."
inputParameters:
- name: site_id
in: body
type: string
description: "Site ID."
- name: file_path
in: body
type: string
description: "File path."
call: "sharepoint.get-file"
with:
site_id: "{{site_id}}"
file_path: "{{file_path}}"
outputParameters:
- name: download_url
type: string
mapping: "$.@microsoft.graph.downloadUrl"
- name: last_modified
type: string
mapping: "$.lastModifiedDateTime"
consumes:
- type: http
namespace: sharepoint
baseUri: "https://graph.microsoft.com/v1.0/sites"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: files
path: "/{{site_id}}/drive/root:/{{file_path}}"
inputParameters:
- name: site_id
in: path
- name: file_path
in: path
operations:
- name: get-file
method: GET
Compares shipping rates across carriers for a book order and returns the cheapest option.
naftiko: "0.5"
info:
label: "Shipping Rate Comparison"
description: "Compares shipping rates across carriers for a book order and returns the cheapest option."
tags:
- logistics
- shipping
capability:
exposes:
- type: mcp
namespace: shipping
port: 8080
tools:
- name: compare-rates
description: "Get shipping rates from multiple carriers for a package."
inputParameters:
- name: weight_lbs
in: body
type: number
description: "Package weight."
- name: origin_zip
in: body
type: string
description: "Origin ZIP."
- name: destination_zip
in: body
type: string
description: "Destination ZIP."
steps:
- name: ups-rate
type: call
call: "ups.get-rate"
with:
weight: "{{weight_lbs}}"
origin: "{{origin_zip}}"
destination: "{{destination_zip}}"
- name: usps-rate
type: call
call: "usps.get-rate"
with:
weight: "{{weight_lbs}}"
origin: "{{origin_zip}}"
destination: "{{destination_zip}}"
consumes:
- type: http
namespace: ups
baseUri: "https://onlinetools.ups.com/api"
authentication:
type: bearer
token: "$secrets.ups_token"
resources:
- name: rating
path: "/rating/v1/rate"
operations:
- name: get-rate
method: POST
- type: http
namespace: usps
baseUri: "https://secure.shippingapis.com/ShippingAPI.dll"
authentication:
type: apikey
key: "$secrets.usps_user_id"
resources:
- name: rate-calc
path: "?API=RateV4"
operations:
- name: get-rate
method: GET
Aggregates engagement data from Instagram and Facebook, compiles metrics into a Google Sheet, refreshes the Tableau dashboard, and emails the marketing team via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Social Media Engagement Report Pipeline"
description: "Aggregates engagement data from Instagram and Facebook, compiles metrics into a Google Sheet, refreshes the Tableau dashboard, and emails the marketing team via Microsoft Outlook."
tags:
- retail
- instagram
- facebook
- google-sheets
- tableau
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: social-report
port: 8080
tools:
- name: generate-social-report
description: "Orchestrate social media engagement report across platforms."
inputParameters:
- name: date_range
in: body
type: string
description: "Date range for the report."
steps:
- name: get-instagram-metrics
type: call
call: "instagram.get-insights"
with:
date_range: "{{date_range}}"
- name: get-facebook-metrics
type: call
call: "facebook.get-page-insights"
with:
date_range: "{{date_range}}"
- name: log-metrics
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bn_social_metrics"
data: "{{date_range}},{{get-instagram-metrics.engagement}},{{get-facebook-metrics.engagement}}"
- name: refresh-tableau
type: call
call: "tableau.refresh-workbook"
with:
workbook_id: "bn_social_dashboard"
- name: email-report
type: call
call: "outlook.send-email"
with:
to: "marketing@barnesandnoble.com"
subject: "Social Media Engagement Report - {{date_range}}"
body: "Instagram engagement: {{get-instagram-metrics.engagement}}. Facebook engagement: {{get-facebook-metrics.engagement}}. Tableau dashboard refreshed."
consumes:
- type: http
namespace: instagram
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.instagram_token"
resources:
- name: insights
path: "/me/insights"
operations:
- name: get-insights
method: GET
- type: http
namespace: facebook
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.facebook_page_token"
resources:
- name: page-insights
path: "/me/insights"
operations:
- name: get-page-insights
method: GET
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
- type: http
namespace: tableau
baseUri: "https://tableau.barnesandnoble.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: workbooks
path: "/sites/{{site_id}}/workbooks/{{workbook_id}}/refresh"
inputParameters:
- name: workbook_id
in: path
operations:
- name: refresh-workbook
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Executes a Splunk search query against the e-commerce application logs and returns matching events.
naftiko: "0.5"
info:
label: "Splunk Log Search"
description: "Executes a Splunk search query against the e-commerce application logs and returns matching events."
tags:
- retail
- splunk
capability:
exposes:
- type: mcp
namespace: splunk
port: 8080
tools:
- name: search-logs
description: "Execute a Splunk search query."
inputParameters:
- name: query
in: body
type: string
description: "Splunk search query string."
- name: earliest_time
in: body
type: string
description: "Earliest time for search window."
call: "splunk.create-search"
with:
search: "{{query}}"
earliest_time: "{{earliest_time}}"
outputParameters:
- name: search_id
type: string
mapping: "$.sid"
consumes:
- type: http
namespace: splunk
baseUri: "https://splunk.barnesandnoble.com:8089"
authentication:
type: bearer
token: "$secrets.splunk_token"
resources:
- name: search-jobs
path: "/services/search/jobs"
operations:
- name: create-search
method: POST
Handles store closure announcements by updating the store locator in BigCommerce, notifying customers via Adobe Campaign email, posting to social media via Instagram, and alerting employees via Microsoft Teams.
naftiko: "0.5"
info:
label: "Store Closure Notification Pipeline"
description: "Handles store closure announcements by updating the store locator in BigCommerce, notifying customers via Adobe Campaign email, posting to social media via Instagram, and alerting employees via Microsoft Teams."
tags:
- retail
- bigcommerce
- adobe-campaign
- instagram
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: store-closure
port: 8080
tools:
- name: announce-store-closure
description: "Orchestrate store closure notification across channels."
inputParameters:
- name: store_name
in: body
type: string
description: "Store name."
- name: closure_date
in: body
type: string
description: "Closure date."
- name: reason
in: body
type: string
description: "Reason for closure."
steps:
- name: update-locator
type: call
call: "bigcommerce.update-location"
with:
store_name: "{{store_name}}"
status: "closing"
closure_date: "{{closure_date}}"
- name: email-customers
type: call
call: "adobe-campaign.create-delivery"
with:
template: "store_closure"
label: "Store Closure: {{store_name}}"
scheduled_date: "{{closure_date}}"
- name: post-social
type: call
call: "instagram.create-post"
with:
caption: "Our {{store_name}} location will be closing on {{closure_date}}. Thank you for your loyalty. Visit barnesandnoble.com for continued service."
- name: notify-employees
type: call
call: "msteams.send-message"
with:
channel_id: "store_ops"
text: "Store closure announced: {{store_name}} closing {{closure_date}}. Reason: {{reason}}."
consumes:
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: locations
path: "/store-locations"
operations:
- name: update-location
method: PATCH
- type: http
namespace: adobe-campaign
baseUri: "https://mc.adobe.io/bn/campaign"
authentication:
type: bearer
token: "$secrets.adobe_campaign_token"
resources:
- name: deliveries
path: "/profileAndServicesExt/delivery"
operations:
- name: create-delivery
method: POST
- type: http
namespace: instagram
baseUri: "https://graph.facebook.com/v18.0"
authentication:
type: bearer
token: "$secrets.instagram_token"
resources:
- name: media
path: "/me/media"
operations:
- name: create-post
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Orchestrates an inventory transfer between stores by checking stock in the WMS, creating a transfer order in Oracle EBS, and notifying both store managers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Store Inventory Transfer Orchestrator"
description: "Orchestrates an inventory transfer between stores by checking stock in the WMS, creating a transfer order in Oracle EBS, and notifying both store managers via Microsoft Teams."
tags:
- retail
- oracle-e-business-suite
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: store-transfer
port: 8080
tools:
- name: transfer-inventory
description: "Orchestrate inventory transfer between two store locations."
inputParameters:
- name: isbn
in: body
type: string
description: "Book ISBN."
- name: from_store
in: body
type: string
description: "Source store ID."
- name: to_store
in: body
type: string
description: "Destination store ID."
- name: quantity
in: body
type: number
description: "Number of units to transfer."
steps:
- name: check-stock
type: call
call: "wms.get-inventory"
with:
isbn: "{{isbn}}"
location: "{{from_store}}"
- name: create-transfer
type: call
call: "oracle-ebs.create-transfer-order"
with:
isbn: "{{isbn}}"
from_store: "{{from_store}}"
to_store: "{{to_store}}"
quantity: "{{quantity}}"
- name: notify-stores
type: call
call: "msteams.send-message"
with:
channel_id: "store_ops"
text: "Transfer order {{create-transfer.order_id}} created: {{quantity}} units of ISBN {{isbn}} from store {{from_store}} to store {{to_store}}."
consumes:
- type: http
namespace: wms
baseUri: "https://wms.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.wms_token"
resources:
- name: inventory
path: "/inventory/{{isbn}}"
inputParameters:
- name: isbn
in: path
operations:
- name: get-inventory
method: GET
- type: http
namespace: oracle-ebs
baseUri: "https://erp.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_ebs_token"
resources:
- name: transfer-orders
path: "/transfer-orders"
operations:
- name: create-transfer-order
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Finds the nearest Barnes & Noble stores by ZIP code using Google Maps.
naftiko: "0.5"
info:
label: "Store Locator"
description: "Finds the nearest Barnes & Noble stores by ZIP code using Google Maps."
tags:
- retail
- google-maps
- store-locator
capability:
exposes:
- type: mcp
namespace: store-locator
port: 8080
tools:
- name: find-nearest-stores
description: "Find the nearest B&N stores."
inputParameters:
- name: zip_code
in: body
type: string
description: "Customer ZIP."
- name: radius_miles
in: body
type: number
description: "Search radius."
call: "gmaps.search-places"
with:
query: "Barnes Noble"
location: "{{zip_code}}"
radius: "{{radius_miles}}"
outputParameters:
- name: stores
type: array
mapping: "$.results"
consumes:
- type: http
namespace: gmaps
baseUri: "https://maps.googleapis.com/maps/api"
authentication:
type: apikey
key: "$secrets.google_maps_key"
resources:
- name: places
path: "/place/textsearch/json"
operations:
- name: search-places
method: GET
When a new B&N store is approved, creates a Microsoft Planner plan, provisions the store POS, creates a Teams channel, and opens a Jira epic for the build-out.
naftiko: "0.5"
info:
label: "Store Opening Coordinator"
description: "When a new B&N store is approved, creates a Microsoft Planner plan, provisions the store POS, creates a Teams channel, and opens a Jira epic for the build-out."
tags:
- retail
- operations
- microsoft-planner
- microsoft-teams
- jira
capability:
exposes:
- type: mcp
namespace: store-opening
port: 8080
tools:
- name: initiate-store-opening
description: "Coordinate all systems for a new Barnes & Noble store opening."
inputParameters:
- name: store_id
in: body
type: string
description: "Store ID."
- name: store_name
in: body
type: string
description: "Store name."
- name: target_date
in: body
type: string
description: "Target opening date."
steps:
- name: create-plan
type: call
call: "planner.create-plan"
with:
title: "B&N Opening: {{store_name}}"
group_id: "store_openings"
- name: provision-pos
type: call
call: "pos.create-store"
with:
store_id: "{{store_id}}"
name: "{{store_name}}"
- name: create-channel
type: call
call: "msteams.create-channel"
with:
team_id: "store_ops"
display_name: "{{store_name}} Opening"
- name: create-epic
type: call
call: "jira.create-issue"
with:
project: "STORES"
issue_type: "Epic"
summary: "Build-out: {{store_name}}"
due_date: "{{target_date}}"
consumes:
- type: http
namespace: planner
baseUri: "https://graph.microsoft.com/v1.0/planner"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: plans
path: "/plans"
operations:
- name: create-plan
method: POST
- type: http
namespace: pos
baseUri: "https://pos.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.pos_token"
resources:
- name: stores
path: "/stores"
operations:
- name: create-store
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channels
path: "/teams/{{team_id}}/channels"
inputParameters:
- name: team_id
in: path
operations:
- name: create-channel
method: POST
- type: http
namespace: jira
baseUri: "https://barnesnoble.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
Pulls daily sales from the POS, combines with foot traffic data, and writes a consolidated report to Google Sheets.
naftiko: "0.5"
info:
label: "Store Performance Dashboard Builder"
description: "Pulls daily sales from the POS, combines with foot traffic data, and writes a consolidated report to Google Sheets."
tags:
- retail
- analytics
- pos
- google-analytics
- google-sheets
capability:
exposes:
- type: mcp
namespace: store-performance
port: 8080
tools:
- name: build-daily-report
description: "Aggregate POS sales and traffic data into a daily performance report."
inputParameters:
- name: store_id
in: body
type: string
description: "Store ID."
- name: date
in: body
type: string
description: "Report date."
steps:
- name: get-sales
type: call
call: "pos.get-daily-sales"
with:
store_id: "{{store_id}}"
date: "{{date}}"
- name: get-traffic
type: call
call: "ga.get-store-traffic"
with:
store_id: "{{store_id}}"
date: "{{date}}"
- name: write-report
type: call
call: "gsheets.append-row"
with:
spreadsheet_id: "bn_store_daily"
range: "Performance!A:F"
values:
- "{{date}}"
- "{{store_id}}"
- "{{get-sales.total_revenue}}"
- "{{get-sales.transaction_count}}"
- "{{get-traffic.visitors}}"
- "{{get-sales.avg_basket_size}}"
consumes:
- type: http
namespace: pos
baseUri: "https://pos.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.pos_token"
resources:
- name: daily-sales
path: "/stores/{{store_id}}/sales/{{date}}"
inputParameters:
- name: store_id
in: path
- name: date
in: path
operations:
- name: get-daily-sales
method: GET
- type: http
namespace: ga
baseUri: "https://analyticsreporting.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_analytics_token"
resources:
- name: reports
path: "/reports:batchGet"
operations:
- name: get-store-traffic
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: values
path: "/{{spreadsheet_id}}/values/{{range}}:append"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: append-row
method: POST
When a store WiFi outage is detected via SolarWinds, creates a ServiceNow incident, notifies the IT team via Microsoft Teams, and escalates to the network vendor via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Store WiFi Outage Response Pipeline"
description: "When a store WiFi outage is detected via SolarWinds, creates a ServiceNow incident, notifies the IT team via Microsoft Teams, and escalates to the network vendor via Microsoft Outlook."
tags:
- retail
- solarwinds
- servicenow
- microsoft-teams
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: wifi-outage
port: 8080
tools:
- name: handle-wifi-outage
description: "Orchestrate store WiFi outage response."
inputParameters:
- name: store_code
in: body
type: string
description: "Affected store code."
- name: device_id
in: body
type: string
description: "Network device ID."
steps:
- name: get-device-status
type: call
call: "solarwinds.get-node-status"
with:
node_id: "{{device_id}}"
- name: create-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "WiFi outage at store {{store_code}}"
description: "Device {{device_id}} status: {{get-device-status.status}}. Last seen: {{get-device-status.last_seen}}."
urgency: "1"
- name: notify-it
type: call
call: "msteams.send-message"
with:
channel_id: "it_network"
text: "WiFi outage at store {{store_code}}. Device: {{device_id}}. Incident: {{create-incident.incident_number}}."
- name: escalate-vendor
type: call
call: "outlook.send-email"
with:
to: "support@network-vendor.com"
subject: "Urgent: WiFi outage at B&N store {{store_code}}"
body: "Device {{device_id}} is down. Incident ref: {{create-incident.incident_number}}. Please investigate immediately."
consumes:
- type: http
namespace: solarwinds
baseUri: "https://solarwinds.barnesandnoble.com:17778/SolarWinds/InformationService/v3/Json"
authentication:
type: basic
username: "$secrets.solarwinds_user"
password: "$secrets.solarwinds_pass"
resources:
- name: nodes
path: "/Query?query=SELECT+Status+FROM+Orion.Nodes+WHERE+NodeID={{node_id}}"
inputParameters:
- name: node_id
in: query
operations:
- name: get-node-status
method: GET
- type: http
namespace: servicenow
baseUri: "https://barnesandnoble.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Pulls open invoices from Oracle E-Business Suite, matches them against purchase orders, flags discrepancies in a Google Sheet, and notifies the accounts payable team via Microsoft Outlook.
naftiko: "0.5"
info:
label: "Supplier Invoice Reconciliation Pipeline"
description: "Pulls open invoices from Oracle E-Business Suite, matches them against purchase orders, flags discrepancies in a Google Sheet, and notifies the accounts payable team via Microsoft Outlook."
tags:
- retail
- oracle-e-business-suite
- google-sheets
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: invoice-recon
port: 8080
tools:
- name: reconcile-invoices
description: "Orchestrate supplier invoice reconciliation against purchase orders."
inputParameters:
- name: supplier_id
in: body
type: string
description: "Supplier ID to reconcile."
- name: period
in: body
type: string
description: "Accounting period."
steps:
- name: get-invoices
type: call
call: "oracle-ebs.list-invoices"
with:
supplier_id: "{{supplier_id}}"
period: "{{period}}"
- name: get-purchase-orders
type: call
call: "oracle-ebs.list-pos"
with:
supplier_id: "{{supplier_id}}"
period: "{{period}}"
- name: log-discrepancies
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bn_invoice_recon"
data: "{{get-invoices.discrepancies}}"
- name: notify-ap
type: call
call: "outlook.send-email"
with:
to: "ap-team@barnesandnoble.com"
subject: "Invoice Reconciliation: {{supplier_id}} - {{period}}"
body: "Reconciliation complete. {{get-invoices.discrepancy_count}} discrepancies found. See Google Sheet for details."
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://erp.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_ebs_token"
resources:
- name: invoices
path: "/invoices"
operations:
- name: list-invoices
method: GET
- name: purchase-orders
path: "/purchase-orders"
operations:
- name: list-pos
method: GET
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
Triggers a refresh of a specified Tableau workbook, updating all data extracts with the latest data from source systems.
naftiko: "0.5"
info:
label: "Tableau Workbook Refresh"
description: "Triggers a refresh of a specified Tableau workbook, updating all data extracts with the latest data from source systems."
tags:
- retail
- tableau
capability:
exposes:
- type: mcp
namespace: tableau
port: 8080
tools:
- name: refresh-workbook
description: "Trigger a Tableau workbook data extract refresh."
inputParameters:
- name: workbook_id
in: body
type: string
description: "Tableau workbook ID."
call: "tableau.refresh-workbook"
with:
workbook_id: "{{workbook_id}}"
outputParameters:
- name: job_id
type: string
mapping: "$.job.id"
- name: status
type: string
mapping: "$.job.status"
consumes:
- type: http
namespace: tableau
baseUri: "https://tableau.barnesandnoble.com/api/3.19"
authentication:
type: bearer
token: "$secrets.tableau_token"
resources:
- name: workbooks
path: "/sites/{{site_id}}/workbooks/{{workbook_id}}/refresh"
inputParameters:
- name: workbook_id
in: path
operations:
- name: refresh-workbook
method: POST
Executes a predefined sales data query against the Teradata data warehouse, returning aggregate sales figures for a given date range.
naftiko: "0.5"
info:
label: "Teradata Sales Query"
description: "Executes a predefined sales data query against the Teradata data warehouse, returning aggregate sales figures for a given date range."
tags:
- retail
- teradata
capability:
exposes:
- type: mcp
namespace: teradata
port: 8080
tools:
- name: query-sales
description: "Query Teradata for aggregate sales data by date range."
inputParameters:
- name: start_date
in: body
type: string
description: "Start date in YYYY-MM-DD format."
- name: end_date
in: body
type: string
description: "End date in YYYY-MM-DD format."
call: "teradata.run-sales-query"
with:
start_date: "{{start_date}}"
end_date: "{{end_date}}"
outputParameters:
- name: total_revenue
type: number
mapping: "$.results.total_revenue"
- name: transaction_count
type: number
mapping: "$.results.txn_count"
consumes:
- type: http
namespace: teradata
baseUri: "https://teradata.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: queries
path: "/queries/sales"
operations:
- name: run-sales-query
method: POST
Publishes a tweet to the Barnes and Noble Twitter account with a given text message.
naftiko: "0.5"
info:
label: "Twitter Post Publisher"
description: "Publishes a tweet to the Barnes and Noble Twitter account with a given text message."
tags:
- retail
- twitter
capability:
exposes:
- type: mcp
namespace: twitter
port: 8080
tools:
- name: publish-tweet
description: "Publish a tweet to the company Twitter account."
inputParameters:
- name: text
in: body
type: string
description: "Tweet text content."
call: "twitter.create-tweet"
with:
text: "{{text}}"
outputParameters:
- name: tweet_id
type: string
mapping: "$.data.id"
consumes:
- type: http
namespace: twitter
baseUri: "https://api.twitter.com/2"
authentication:
type: bearer
token: "$secrets.twitter_bearer_token"
resources:
- name: tweets
path: "/tweets"
operations:
- name: create-tweet
method: POST
Onboards a new vendor catalog by creating the vendor in Oracle EBS, importing products into BigCommerce, logging the onboarding in Google Sheets, and notifying the merchandising team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Vendor Catalog Onboarding Pipeline"
description: "Onboards a new vendor catalog by creating the vendor in Oracle EBS, importing products into BigCommerce, logging the onboarding in Google Sheets, and notifying the merchandising team via Microsoft Teams."
tags:
- retail
- oracle-e-business-suite
- bigcommerce
- google-sheets
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: vendor-onboard
port: 8080
tools:
- name: onboard-vendor-catalog
description: "Orchestrate vendor catalog onboarding across systems."
inputParameters:
- name: vendor_name
in: body
type: string
description: "Vendor name."
- name: catalog_file_url
in: body
type: string
description: "URL to vendor catalog file."
steps:
- name: create-vendor
type: call
call: "oracle-ebs.create-vendor"
with:
vendor_name: "{{vendor_name}}"
- name: import-products
type: call
call: "bigcommerce.import-catalog"
with:
source_url: "{{catalog_file_url}}"
vendor_id: "{{create-vendor.vendor_id}}"
- name: log-onboarding
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bn_vendor_onboarding"
data: "{{vendor_name}},{{create-vendor.vendor_id}},{{import-products.product_count}}"
- name: notify-merchandising
type: call
call: "msteams.send-message"
with:
channel_id: "merchandising"
text: "New vendor catalog onboarded: {{vendor_name}}. {{import-products.product_count}} products imported."
consumes:
- type: http
namespace: oracle-ebs
baseUri: "https://erp.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.oracle_ebs_token"
resources:
- name: vendors
path: "/vendors"
operations:
- name: create-vendor
method: POST
- type: http
namespace: bigcommerce
baseUri: "https://api.bigcommerce.com/stores/bn-store/v3"
authentication:
type: bearer
token: "$secrets.bigcommerce_token"
resources:
- name: catalog-import
path: "/catalog/products/import"
operations:
- name: import-catalog
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Creates a purchase order for a publisher in the OMS, logs it in Google Sheets, and notifies the buying team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Vendor Purchase Order Creator"
description: "Creates a purchase order for a publisher in the OMS, logs it in Google Sheets, and notifies the buying team via Microsoft Teams."
tags:
- procurement
- oms
- google-sheets
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: vendor-procurement
port: 8080
tools:
- name: create-publisher-po
description: "Generate a purchase order for a book publisher and notify the buying team."
inputParameters:
- name: publisher_id
in: body
type: string
description: "Publisher vendor ID."
- name: isbn
in: body
type: string
description: "ISBN to order."
- name: quantity
in: body
type: number
description: "Order quantity."
steps:
- name: create-po
type: call
call: "oms.create-purchase-order"
with:
vendor_id: "{{publisher_id}}"
isbn: "{{isbn}}"
quantity: "{{quantity}}"
- name: log-po
type: call
call: "gsheets.append-row"
with:
spreadsheet_id: "bn_po_tracker"
range: "POs!A:D"
values:
- "{{create-po.po_number}}"
- "{{isbn}}"
- "{{publisher_id}}"
- "{{quantity}}"
- name: notify-buyers
type: call
call: "msteams.send-message"
with:
channel_id: "buying_team"
text: "PO {{create-po.po_number}} created: {{quantity}} copies of ISBN {{isbn}} from publisher {{publisher_id}}."
consumes:
- type: http
namespace: oms
baseUri: "https://oms.barnesandnoble.com/api/v2"
authentication:
type: bearer
token: "$secrets.oms_token"
resources:
- name: purchase-orders
path: "/purchase-orders"
operations:
- name: create-purchase-order
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: values
path: "/{{spreadsheet_id}}/values/{{range}}:append"
inputParameters:
- name: spreadsheet_id
in: path
- name: range
in: path
operations:
- name: append-row
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Processes warehouse damage claims by logging the incident in ServiceNow, adjusting inventory in the WMS, notifying the vendor via Microsoft Outlook, and updating the claim tracker in Google Sheets.
naftiko: "0.5"
info:
label: "Warehouse Damage Claim Pipeline"
description: "Processes warehouse damage claims by logging the incident in ServiceNow, adjusting inventory in the WMS, notifying the vendor via Microsoft Outlook, and updating the claim tracker in Google Sheets."
tags:
- retail
- servicenow
- google-sheets
- microsoft-outlook
capability:
exposes:
- type: mcp
namespace: damage-claim
port: 8080
tools:
- name: process-damage-claim
description: "Orchestrate warehouse damage claim processing."
inputParameters:
- name: isbn
in: body
type: string
description: "Damaged book ISBN."
- name: quantity
in: body
type: number
description: "Number of damaged units."
- name: vendor_email
in: body
type: string
description: "Vendor email address."
steps:
- name: log-incident
type: call
call: "servicenow.create-incident"
with:
short_description: "Warehouse damage: ISBN {{isbn}} - {{quantity}} units"
description: "{{quantity}} units of ISBN {{isbn}} found damaged during receiving."
category: "warehouse"
- name: adjust-inventory
type: call
call: "wms.adjust-quantity"
with:
isbn: "{{isbn}}"
adjustment: "-{{quantity}}"
reason: "damage"
- name: notify-vendor
type: call
call: "outlook.send-email"
with:
to: "{{vendor_email}}"
subject: "Damage Claim: ISBN {{isbn}} - {{quantity}} units"
body: "We have identified {{quantity}} damaged units of ISBN {{isbn}} during receiving. Incident ref: {{log-incident.incident_number}}. Please advise on replacement."
- name: update-tracker
type: call
call: "gsheets.append-rows"
with:
spreadsheet_id: "bn_damage_claims"
data: "{{isbn}},{{quantity}},{{log-incident.incident_number}},pending"
consumes:
- type: http
namespace: servicenow
baseUri: "https://barnesandnoble.service-now.com/api/now"
authentication:
type: bearer
token: "$secrets.servicenow_token"
resources:
- name: incidents
path: "/table/incident"
operations:
- name: create-incident
method: POST
- type: http
namespace: wms
baseUri: "https://wms.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.wms_token"
resources:
- name: adjustments
path: "/inventory/adjustments"
operations:
- name: adjust-quantity
method: POST
- type: http
namespace: outlook
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: mail
path: "/me/sendMail"
operations:
- name: send-email
method: POST
- type: http
namespace: gsheets
baseUri: "https://sheets.googleapis.com/v4"
authentication:
type: bearer
token: "$secrets.google_sheets_token"
resources:
- name: spreadsheets
path: "/spreadsheets/{{spreadsheet_id}}/values:append"
inputParameters:
- name: spreadsheet_id
in: path
operations:
- name: append-rows
method: POST
When a publisher shipment arrives, confirms receipt in the WMS, updates the PO in the OMS, and notifies the buying team.
naftiko: "0.5"
info:
label: "Warehouse Receiving Confirmation"
description: "When a publisher shipment arrives, confirms receipt in the WMS, updates the PO in the OMS, and notifies the buying team."
tags:
- logistics
- warehouse
- wms
- oms
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: warehouse-receiving
port: 8080
tools:
- name: confirm-shipment
description: "Confirm receipt of a publisher shipment and update all systems."
inputParameters:
- name: shipment_id
in: body
type: string
description: "Shipment ID."
- name: po_number
in: body
type: string
description: "PO number."
- name: units_received
in: body
type: number
description: "Units received."
steps:
- name: confirm-wms
type: call
call: "wms.confirm-receipt"
with:
shipment_id: "{{shipment_id}}"
units: "{{units_received}}"
- name: update-po
type: call
call: "oms.update-po-status"
with:
po_number: "{{po_number}}"
status: "received"
- name: notify-buyers
type: call
call: "msteams.send-message"
with:
channel_id: "buying_team"
text: "Shipment {{shipment_id}} received: {{units_received}} units for PO {{po_number}}."
consumes:
- type: http
namespace: wms
baseUri: "https://wms.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.wms_token"
resources:
- name: receiving
path: "/shipments/{{shipment_id}}/receive"
inputParameters:
- name: shipment_id
in: path
operations:
- name: confirm-receipt
method: POST
- type: http
namespace: oms
baseUri: "https://oms.barnesandnoble.com/api/v2"
authentication:
type: bearer
token: "$secrets.oms_token"
resources:
- name: purchase-orders
path: "/purchase-orders/{{po_number}}/status"
inputParameters:
- name: po_number
in: path
operations:
- name: update-po-status
method: PUT
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Triggers an Azure DevOps build, validates the deployment via Datadog health check, purges the Cloudflare CDN cache, and notifies the engineering team via Microsoft Teams.
naftiko: "0.5"
info:
label: "Website Deployment Pipeline"
description: "Triggers an Azure DevOps build, validates the deployment via Datadog health check, purges the Cloudflare CDN cache, and notifies the engineering team via Microsoft Teams."
tags:
- retail
- azure-devops
- datadog
- cloudflare
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: deploy
port: 8080
tools:
- name: deploy-website
description: "Orchestrate website deployment with validation and cache purge."
inputParameters:
- name: branch
in: body
type: string
description: "Git branch to deploy."
- name: environment
in: body
type: string
description: "Target environment."
steps:
- name: trigger-build
type: call
call: "azdo.queue-build"
with:
branch: "{{branch}}"
definition_id: "bn-web-deploy"
- name: health-check
type: call
call: "datadog.get-service-status"
with:
service: "bn-web-{{environment}}"
- name: purge-cache
type: call
call: "cloudflare.purge-cache"
with:
zone_id: "bn_web_zone"
purge_everything: true
- name: notify-team
type: call
call: "msteams.send-message"
with:
channel_id: "engineering"
text: "Website deployed from {{branch}} to {{environment}}. Build: {{trigger-build.build_id}}. Health: {{health-check.status}}. CDN cache purged."
consumes:
- type: http
namespace: azdo
baseUri: "https://dev.azure.com/barnesandnoble/web/_apis"
authentication:
type: bearer
token: "$secrets.azdo_token"
resources:
- name: builds
path: "/build/builds?api-version=7.0"
operations:
- name: queue-build
method: POST
- type: http
namespace: datadog
baseUri: "https://api.datadoghq.com/api/v1"
authentication:
type: apiKey
key: "$secrets.datadog_api_key"
resources:
- name: service-checks
path: "/check_run"
operations:
- name: get-service-status
method: GET
- type: http
namespace: cloudflare
baseUri: "https://api.cloudflare.com/client/v4"
authentication:
type: bearer
token: "$secrets.cloudflare_token"
resources:
- name: cache
path: "/zones/{{zone_id}}/purge_cache"
inputParameters:
- name: zone_id
in: path
operations:
- name: purge-cache
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Queries the data warehouse for the top-selling books of the week, generates an email campaign in Adobe Campaign, and posts a summary to the marketing Microsoft Teams channel.
naftiko: "0.5"
info:
label: "Weekly Bestseller Email Campaign"
description: "Queries the data warehouse for the top-selling books of the week, generates an email campaign in Adobe Campaign, and posts a summary to the marketing Microsoft Teams channel."
tags:
- retail
- teradata
- adobe-campaign
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: bestseller-email
port: 8080
tools:
- name: send-bestseller-campaign
description: "Orchestrate weekly bestseller email campaign creation and notification."
inputParameters:
- name: week_ending
in: body
type: string
description: "Week ending date in YYYY-MM-DD format."
steps:
- name: fetch-bestsellers
type: call
call: "teradata.query-bestsellers"
with:
week_ending: "{{week_ending}}"
- name: create-campaign
type: call
call: "adobe-campaign.create-delivery"
with:
template: "weekly_bestsellers"
label: "This Week's Bestsellers - {{week_ending}}"
data: "{{fetch-bestsellers.results}}"
- name: notify-marketing
type: call
call: "msteams.send-message"
with:
channel_id: "marketing"
text: "Weekly bestseller email campaign created for week ending {{week_ending}}. Campaign ID: {{create-campaign.delivery_id}}"
consumes:
- type: http
namespace: teradata
baseUri: "https://teradata.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.teradata_token"
resources:
- name: bestsellers
path: "/queries/bestsellers"
operations:
- name: query-bestsellers
method: POST
- type: http
namespace: adobe-campaign
baseUri: "https://mc.adobe.io/bn/campaign"
authentication:
type: bearer
token: "$secrets.adobe_campaign_token"
resources:
- name: deliveries
path: "/profileAndServicesExt/delivery"
operations:
- name: create-delivery
method: POST
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Sends a WhatsApp notification message to a customer using a pre-approved template for order updates and promotions.
naftiko: "0.5"
info:
label: "WhatsApp Customer Notification"
description: "Sends a WhatsApp notification message to a customer using a pre-approved template for order updates and promotions."
tags:
- retail
- whatsapp
capability:
exposes:
- type: mcp
namespace: whatsapp
port: 8080
tools:
- name: send-notification
description: "Send a WhatsApp notification to a customer."
inputParameters:
- name: phone_number
in: body
type: string
description: "Customer phone number."
- name: template_name
in: body
type: string
description: "WhatsApp message template name."
- name: parameters
in: body
type: object
description: "Template parameters."
call: "whatsapp.send-template"
with:
phone_number: "{{phone_number}}"
template_name: "{{template_name}}"
parameters: "{{parameters}}"
outputParameters:
- name: message_id
type: string
mapping: "$.messages[0].id"
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"
operations:
- name: send-template
method: POST
Pulls weekly shift schedules and sends reminders to booksellers via Microsoft Teams.
naftiko: "0.5"
info:
label: "Workforce Scheduling Reminder"
description: "Pulls weekly shift schedules and sends reminders to booksellers via Microsoft Teams."
tags:
- hr
- workforce-management
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: workforce
port: 8080
tools:
- name: send-schedule-reminders
description: "Send weekly shift reminders to store booksellers."
inputParameters:
- name: store_id
in: body
type: string
description: "Store ID."
- name: week_start
in: body
type: string
description: "Week start date."
steps:
- name: get-schedule
type: call
call: "wfm.get-schedule"
with:
store_id: "{{store_id}}"
week_start: "{{week_start}}"
- name: notify-store
type: call
call: "msteams.send-message"
with:
channel_id: "store_{{store_id}}"
text: "Weekly schedule posted for store {{store_id}} starting {{week_start}}. {{get-schedule.summary}}"
consumes:
- type: http
namespace: wfm
baseUri: "https://wfm.barnesandnoble.com/api/v1"
authentication:
type: bearer
token: "$secrets.wfm_token"
resources:
- name: schedules
path: "/stores/{{store_id}}/schedules"
inputParameters:
- name: store_id
in: path
operations:
- name: get-schedule
method: GET
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST
Checks the processing status of a video uploaded to the Barnes and Noble YouTube channel by video ID.
naftiko: "0.5"
info:
label: "YouTube Video Upload Status"
description: "Checks the processing status of a video uploaded to the Barnes and Noble YouTube channel by video ID."
tags:
- retail
- youtube
capability:
exposes:
- type: mcp
namespace: youtube
port: 8080
tools:
- name: get-video-status
description: "Check the processing status of a YouTube video."
inputParameters:
- name: video_id
in: body
type: string
description: "YouTube video ID."
call: "youtube.get-video"
with:
video_id: "{{video_id}}"
outputParameters:
- name: title
type: string
mapping: "$.items[0].snippet.title"
- name: status
type: string
mapping: "$.items[0].status.uploadStatus"
consumes:
- type: http
namespace: youtube
baseUri: "https://www.googleapis.com/youtube/v3"
authentication:
type: bearer
token: "$secrets.youtube_token"
resources:
- name: videos
path: "/videos?id={{video_id}}&part=status,snippet"
inputParameters:
- name: video_id
in: query
operations:
- name: get-video
method: GET
Creates a scheduled Zoom meeting for store manager check-ins or author event planning sessions.
naftiko: "0.5"
info:
label: "Zoom Meeting Scheduler"
description: "Creates a scheduled Zoom meeting for store manager check-ins or author event planning sessions."
tags:
- retail
- zoom
capability:
exposes:
- type: mcp
namespace: zoom
port: 8080
tools:
- name: create-meeting
description: "Schedule a Zoom meeting."
inputParameters:
- name: topic
in: body
type: string
description: "Meeting topic."
- name: start_time
in: body
type: string
description: "Start time in ISO 8601 format."
- name: duration
in: body
type: number
description: "Duration in minutes."
call: "zoom.create-meeting"
with:
topic: "{{topic}}"
start_time: "{{start_time}}"
duration: "{{duration}}"
outputParameters:
- name: meeting_id
type: string
mapping: "$.id"
- name: join_url
type: string
mapping: "$.join_url"
consumes:
- type: http
namespace: zoom
baseUri: "https://api.zoom.us/v2"
authentication:
type: bearer
token: "$secrets.zoom_token"
resources:
- name: meetings
path: "/users/me/meetings"
operations:
- name: create-meeting
method: POST
Enriches corporate sales leads by looking up company data in ZoomInfo, updating the lead in Salesforce, and notifying the corporate sales team via Microsoft Teams.
naftiko: "0.5"
info:
label: "ZoomInfo Lead Enrichment Pipeline"
description: "Enriches corporate sales leads by looking up company data in ZoomInfo, updating the lead in Salesforce, and notifying the corporate sales team via Microsoft Teams."
tags:
- retail
- zoominfo
- salesforce
- microsoft-teams
capability:
exposes:
- type: mcp
namespace: lead-enrich
port: 8080
tools:
- name: enrich-lead
description: "Orchestrate corporate lead enrichment from ZoomInfo to Salesforce."
inputParameters:
- name: company_name
in: body
type: string
description: "Company name to enrich."
- name: lead_id
in: body
type: string
description: "Salesforce lead ID."
steps:
- name: lookup-company
type: call
call: "zoominfo.search-company"
with:
company_name: "{{company_name}}"
- name: update-lead
type: call
call: "salesforce.update-lead"
with:
lead_id: "{{lead_id}}"
company_size: "{{lookup-company.employee_count}}"
industry: "{{lookup-company.industry}}"
revenue: "{{lookup-company.revenue}}"
- name: notify-sales
type: call
call: "msteams.send-message"
with:
channel_id: "corporate_sales"
text: "Lead enriched: {{company_name}}. Employees: {{lookup-company.employee_count}}. Revenue: ${{lookup-company.revenue}}. Lead ID: {{lead_id}}."
consumes:
- type: http
namespace: zoominfo
baseUri: "https://api.zoominfo.com"
authentication:
type: bearer
token: "$secrets.zoominfo_token"
resources:
- name: companies
path: "/search/company"
operations:
- name: search-company
method: POST
- type: http
namespace: salesforce
baseUri: "https://barnesandnoble.my.salesforce.com/services/data/v58.0"
authentication:
type: bearer
token: "$secrets.salesforce_token"
resources:
- name: leads
path: "/sobjects/Lead/{{lead_id}}"
inputParameters:
- name: lead_id
in: path
operations:
- name: update-lead
method: PATCH
- type: http
namespace: msteams
baseUri: "https://graph.microsoft.com/v1.0"
authentication:
type: bearer
token: "$secrets.msgraph_token"
resources:
- name: channel-messages
path: "/teams/{{team_id}}/channels/{{channel_id}}/messages"
inputParameters:
- name: channel_id
in: path
operations:
- name: send-message
method: POST