Barnes Nobles Capabilities

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

Sort
Expand

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