Hasbro Capabilities

Naftiko 0.5 capability definitions for Hasbro - 105 capabilities showing integration workflows and service orchestrations.

Sort
Expand

Retrieves payroll summary from ADP for a given pay period.

naftiko: "0.5"
info:
  label: "ADP Payroll Summary"
  description: "Retrieves payroll summary from ADP for a given pay period."
  tags:
    - hr
    - payroll
    - adp
capability:
  exposes:
    - type: mcp
      namespace: hr-payroll
      port: 8080
      tools:
        - name: get-payroll-summary
          description: "Get payroll summary from ADP."
          inputParameters:
            - name: pay_period
              in: body
              type: string
              description: "The pay period identifier."
          call: "adp.get-payroll"
          with:
            pay_period: "{{pay_period}}"
          outputParameters:
            - name: total_gross
              type: string
              mapping: "$.payrollSummary.totalGross"
            - name: total_net
              type: string
              mapping: "$.payrollSummary.totalNet"
            - name: employee_count
              type: integer
              mapping: "$.payrollSummary.headcount"
  consumes:
    - type: http
      namespace: adp
      baseUri: "https://api.adp.com/hr/v2"
      authentication:
        type: bearer
        token: "$secrets.adp_token"
      resources:
        - name: payroll
          path: "/payroll-outputs?payPeriod={{pay_period}}"
          inputParameters:
            - name: pay_period
              in: query
          operations:
            - name: get-payroll
              method: GET

Retrieves product roadmap entries from Airtable by product line, returning feature name, status, target quarter, and priority.

naftiko: "0.5"
info:
  label: "Airtable Product Roadmap Lookup"
  description: "Retrieves product roadmap entries from Airtable by product line, returning feature name, status, target quarter, and priority."
  tags:
    - product
    - airtable
capability:
  exposes:
    - type: mcp
      namespace: airtable-roadmap
      port: 8080
      tools:
        - name: get-roadmap-items
          description: "Look up product roadmap items in Airtable by product line."
          inputParameters:
            - name: product_line
              in: body
              type: string
              description: "The product line to filter."
          call: "airtable.list-records"
          with:
            filter: "{{product_line}}"
          outputParameters:
            - name: feature_name
              type: string
              mapping: "$.records[0].fields.Feature"
            - name: status
              type: string
              mapping: "$.records[0].fields.Status"
  consumes:
    - type: http
      namespace: airtable
      baseUri: "https://api.airtable.com/v0/appHasbro"
      authentication:
        type: bearer
        token: "$secrets.airtable_token"
      resources:
        - name: roadmap
          path: "/ProductRoadmap?filterByFormula={ProductLine}='{{filter}}'"
          inputParameters:
            - name: filter
              in: path
          operations:
            - name: list-records
              method: GET

Retrieves historical spend from SAP, builds forecast models in Snowflake, creates budget templates in Google Sheets, and submits for approval via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Annual Budget Planning Pipeline"
  description: "Retrieves historical spend from SAP, builds forecast models in Snowflake, creates budget templates in Google Sheets, and submits for approval via Microsoft Teams."
  tags:
    - finance
    - sap
    - snowflake
    - google-sheets
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: budget-planning
      port: 8080
      tools:
        - name: plan-budget
          description: "Orchestrate annual budget planning across SAP, Snowflake, Google Sheets, and Teams."
          inputParameters:
            - name: department
              in: body
              type: string
              description: "The department."
            - name: fiscal_year
              in: body
              type: string
              description: "The fiscal year."
          steps:
            - name: get-historical
              type: call
              call: "sap.get-spend-history"
              with:
                department: "{{department}}"
                year: "{{fiscal_year}}"
            - name: build-forecast
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT * FROM BUDGET_FORECAST WHERE dept='{{department}}'"
            - name: create-template
              type: call
              call: "gsheets.create-spreadsheet"
              with:
                title: "Budget {{fiscal_year}} - {{department}}"
            - name: submit-approval
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "finance-approvals"
                text: "Budget plan ready for {{department}} FY{{fiscal_year}}: {{create-template.spreadsheetUrl}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZFINANCE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: spend
          path: "/SpendHistorySet"
          operations:
            - name: get-spend-history
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://hasbro.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets"
          operations:
            - name: create-spreadsheet
              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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves project status from Asana by project GID, returning project name, current status, owner, and due date.

naftiko: "0.5"
info:
  label: "Asana Project Status Lookup"
  description: "Retrieves project status from Asana by project GID, returning project name, current status, owner, and due date."
  tags:
    - project-management
    - asana
capability:
  exposes:
    - type: mcp
      namespace: asana-projects
      port: 8080
      tools:
        - name: get-project-status
          description: "Look up an Asana project status by project GID."
          inputParameters:
            - name: project_gid
              in: body
              type: string
              description: "The Asana project GID."
          call: "asana.get-project"
          with:
            gid: "{{project_gid}}"
          outputParameters:
            - name: project_name
              type: string
              mapping: "$.data.name"
            - name: status
              type: string
              mapping: "$.data.current_status.text"
  consumes:
    - type: http
      namespace: asana
      baseUri: "https://app.asana.com/api/1.0"
      authentication:
        type: bearer
        token: "$secrets.asana_token"
      resources:
        - name: projects
          path: "/projects/{{gid}}"
          inputParameters:
            - name: gid
              in: path
          operations:
            - name: get-project
              method: GET

Retrieves the latest build status for an Azure DevOps pipeline.

naftiko: "0.5"
info:
  label: "Azure DevOps Build Status"
  description: "Retrieves the latest build status for an Azure DevOps pipeline."
  tags:
    - devops
    - ci-cd
    - azure-devops
capability:
  exposes:
    - type: mcp
      namespace: cicd-status
      port: 8080
      tools:
        - name: get-build-status
          description: "Get the latest build status for an Azure DevOps pipeline."
          inputParameters:
            - name: project_name
              in: body
              type: string
              description: "The Azure DevOps project name."
            - name: pipeline_id
              in: body
              type: string
              description: "The pipeline definition ID."
          call: "azdo.get-builds"
          with:
            project: "{{project_name}}"
            definition_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/hasbro"
      authentication:
        type: basic
        username: ""
        password: "$secrets.azdo_pat"
      resources:
        - name: builds
          path: "/{{project}}/_apis/build/builds?definitions={{definition_id}}&$top=1&api-version=7.0"
          inputParameters:
            - name: project
              in: path
            - name: definition_id
              in: query
          operations:
            - name: get-builds
              method: GET

Retrieves an e-commerce order from BigCommerce by order ID, returning order status, total, and shipping details.

naftiko: "0.5"
info:
  label: "BigCommerce Order Status Lookup"
  description: "Retrieves an e-commerce order from BigCommerce by order ID, returning order status, total, and shipping details."
  tags:
    - e-commerce
    - bigcommerce
capability:
  exposes:
    - type: mcp
      namespace: bigcommerce-orders
      port: 8080
      tools:
        - name: get-order
          description: "Look up a BigCommerce order by order ID."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The BigCommerce order ID."
          call: "bigcommerce.get-order"
          with:
            id: "{{order_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: total
              type: string
              mapping: "$.total_inc_tax"
            - name: shipping_method
              type: string
              mapping: "$.shipping_addresses[0].shipping_method"
  consumes:
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/hasbro/v2"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      resources:
        - name: orders
          path: "/orders/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-order
              method: GET

Archives completed product assets from SharePoint to Box for long-term retention.

naftiko: "0.5"
info:
  label: "Box Asset Archive"
  description: "Archives completed product assets from SharePoint to Box for long-term retention."
  tags:
    - document-management
    - archival
    - sharepoint
    - box
capability:
  exposes:
    - type: mcp
      namespace: asset-archival
      port: 8080
      tools:
        - name: archive-to-box
          description: "Move a SharePoint asset to Box for archival."
          inputParameters:
            - name: site_id
              in: body
              type: string
              description: "SharePoint site ID."
            - name: file_path
              in: body
              type: string
              description: "File path in SharePoint."
            - name: box_folder_id
              in: body
              type: string
              description: "Target Box folder ID."
          steps:
            - name: get-file
              type: call
              call: "sharepoint.get-file-content"
              with:
                site_id: "{{site_id}}"
                file_path: "{{file_path}}"
            - name: upload-to-box
              type: call
              call: "box.upload-file"
              with:
                folder_id: "{{box_folder_id}}"
                file_name: "{{file_path}}"
                content: "{{get-file.content}}"
  consumes:
    - 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:/{{file_path}}:/content"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: get-file-content
              method: GET
    - type: http
      namespace: box
      baseUri: "https://upload.box.com/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files/content"
          operations:
            - name: upload-file
              method: POST

On license renewal trigger, retrieves the agreement from Salesforce, creates a DocuSign envelope for signing, updates the Airtable tracker, and notifies stakeholders via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Brand Licensing Renewal Orchestrator"
  description: "On license renewal trigger, retrieves the agreement from Salesforce, creates a DocuSign envelope for signing, updates the Airtable tracker, and notifies stakeholders via Microsoft Teams."
  tags:
    - licensing
    - salesforce
    - docusign
    - airtable
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: licensing-renewal
      port: 8080
      tools:
        - name: renew-license
          description: "Orchestrate a brand licensing renewal across Salesforce, DocuSign, Airtable, and Teams."
          inputParameters:
            - name: license_id
              in: body
              type: string
              description: "The licensing agreement ID."
            - name: partner_name
              in: body
              type: string
              description: "The licensing partner name."
          steps:
            - name: get-agreement
              type: call
              call: "salesforce.get-agreement"
              with:
                id: "{{license_id}}"
            - name: create-envelope
              type: call
              call: "docusign.create-envelope"
              with:
                template_id: "license_renewal_template"
                signer_name: "{{partner_name}}"
                agreement_id: "{{license_id}}"
            - name: update-tracker
              type: call
              call: "airtable.update-record"
              with:
                record_id: "{{license_id}}"
                status: "Renewal In Progress"
                envelope_id: "{{create-envelope.envelopeId}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "licensing-team"
                text: "License renewal initiated for {{partner_name}} ({{license_id}}). DocuSign envelope: {{create-envelope.envelopeId}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hasbro.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: agreements
          path: "/sobjects/Contract/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-agreement
              method: GET
    - type: http
      namespace: docusign
      baseUri: "https://na4.docusign.net/restapi/v2.1/accounts/hasbro"
      authentication:
        type: bearer
        token: "$secrets.docusign_token"
      resources:
        - name: envelopes
          path: "/envelopes"
          operations:
            - name: create-envelope
              method: POST
    - type: http
      namespace: airtable
      baseUri: "https://api.airtable.com/v0/appHasbro"
      authentication:
        type: bearer
        token: "$secrets.airtable_token"
      resources:
        - name: records
          path: "/LicenseTracker/{{record_id}}"
          inputParameters:
            - name: record_id
              in: path
          operations:
            - name: update-record
              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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves latest style guide from SharePoint, distributes to licensees via Box shared links, notifies partners via Microsoft Outlook, and tracks access in Airtable.

naftiko: "0.5"
info:
  label: "Brand Style Guide Distribution Pipeline"
  description: "Retrieves latest style guide from SharePoint, distributes to licensees via Box shared links, notifies partners via Microsoft Outlook, and tracks access in Airtable."
  tags:
    - brand
    - sharepoint
    - box
    - microsoft-outlook
    - airtable
capability:
  exposes:
    - type: mcp
      namespace: style-guide-dist
      port: 8080
      tools:
        - name: distribute-style-guide
          description: "Orchestrate brand style guide distribution across SharePoint, Box, Outlook, and Airtable."
          inputParameters:
            - name: brand
              in: body
              type: string
              description: "The brand name."
            - name: version
              in: body
              type: string
              description: "The style guide version."
          steps:
            - name: get-guide
              type: call
              call: "sharepoint.get-file"
              with:
                site: "brand-assets"
                path: "StyleGuides/{{brand}}/v{{version}}"
            - name: create-shared-link
              type: call
              call: "box.create-shared-link"
              with:
                file_id: "{{get-guide.id}}"
                access: "collaborators"
            - name: notify-partners
              type: call
              call: "outlook.send-email"
              with:
                to: "licensees@hasbro.com"
                subject: "Updated {{brand}} Style Guide v{{version}}"
                body: "Access the latest style guide: {{create-shared-link.url}}"
            - name: track-distribution
              type: call
              call: "airtable.create-record"
              with:
                table: "StyleGuideDistribution"
                brand: "{{brand}}"
                version: "{{version}}"
  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}}/drive/root:/{{path}}"
          inputParameters:
            - name: site
              in: path
            - name: path
              in: path
          operations:
            - name: get-file
              method: GET
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: shared-links
          path: "/files/{{file_id}}"
          inputParameters:
            - name: file_id
              in: path
          operations:
            - name: create-shared-link
              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
    - type: http
      namespace: airtable
      baseUri: "https://api.airtable.com/v0/appHasbro"
      authentication:
        type: bearer
        token: "$secrets.airtable_token"
      resources:
        - name: records
          path: "/StyleGuideDistribution"
          operations:
            - name: create-record
              method: POST

Checks Cloudflare zone health for Hasbro web properties.

naftiko: "0.5"
info:
  label: "Cloudflare Web Security Monitor"
  description: "Checks Cloudflare zone health for Hasbro web properties."
  tags:
    - security
    - cloudflare
    - dns
capability:
  exposes:
    - type: mcp
      namespace: web-security
      port: 8080
      tools:
        - name: check-zone-health
          description: "Check DNS and security health for a Cloudflare zone."
          inputParameters:
            - name: zone_id
              in: body
              type: string
              description: "The Cloudflare zone ID."
          call: "cloudflare.get-zone"
          with:
            zone_id: "{{zone_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.result.status"
            - name: ssl_status
              type: string
              mapping: "$.result.ssl.status"
  consumes:
    - type: http
      namespace: cloudflare
      baseUri: "https://api.cloudflare.com/client/v4"
      authentication:
        type: bearer
        token: "$secrets.cloudflare_token"
      resources:
        - name: zones
          path: "/zones/{{zone_id}}"
          inputParameters:
            - name: zone_id
              in: path
          operations:
            - name: get-zone
              method: GET

Pulls market data from Circana, enriches with Google Analytics trends, stores insights in Snowflake, and publishes a competitive brief to Confluence.

naftiko: "0.5"
info:
  label: "Competitive Intelligence Pipeline"
  description: "Pulls market data from Circana, enriches with Google Analytics trends, stores insights in Snowflake, and publishes a competitive brief to Confluence."
  tags:
    - intelligence
    - circana
    - google-analytics
    - snowflake
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: competitive-intel
      port: 8080
      tools:
        - name: generate-competitive-brief
          description: "Orchestrate competitive intelligence analysis across Circana, Google Analytics, Snowflake, and Confluence."
          inputParameters:
            - name: category
              in: body
              type: string
              description: "The toy category to analyze."
            - name: period
              in: body
              type: string
              description: "The analysis period."
          steps:
            - name: get-market-data
              type: call
              call: "circana.get-category-data"
              with:
                category: "{{category}}"
                period: "{{period}}"
            - name: get-web-trends
              type: call
              call: "ga.get-report"
              with:
                view: "hasbro-ecommerce"
                category: "{{category}}"
            - name: store-insights
              type: call
              call: "snowflake.insert-data"
              with:
                table: "COMPETITIVE_INTEL"
                market_data: "{{get-market-data.results}}"
                web_data: "{{get-web-trends.rows}}"
            - name: publish-brief
              type: call
              call: "confluence.create-page"
              with:
                space_key: "STRATEGY"
                title: "Competitive Brief: {{category}} - {{period}}"
  consumes:
    - type: http
      namespace: circana
      baseUri: "https://api.circana.com/v1"
      authentication:
        type: bearer
        token: "$secrets.circana_token"
      resources:
        - name: categories
          path: "/market-data/{{category}}"
          inputParameters:
            - name: category
              in: path
          operations:
            - name: get-category-data
              method: GET
    - type: http
      namespace: ga
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_token"
      resources:
        - name: reports
          path: "/properties/hasbro:runReport"
          operations:
            - name: get-report
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://hasbro.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: insert-data
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://hasbro.atlassian.net/wiki/api/v2"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST

Creates a product specification page in Confluence from SAP product data.

naftiko: "0.5"
info:
  label: "Confluence Product Spec Publisher"
  description: "Creates a product specification page in Confluence from SAP product data."
  tags:
    - documentation
    - confluence
    - sap
capability:
  exposes:
    - type: mcp
      namespace: product-specs
      port: 8080
      tools:
        - name: publish-product-spec
          description: "Generate and publish a product specification page to Confluence."
          inputParameters:
            - name: product_sku
              in: body
              type: string
              description: "The product SKU."
          steps:
            - name: get-product
              type: call
              call: "sap.get-product-details"
              with:
                sku: "{{product_sku}}"
            - name: create-page
              type: call
              call: "confluence.create-page"
              with:
                space_key: "PROD"
                title: "Product Spec: {{get-product.ProductName}} ({{product_sku}})"
                body: "Category: {{get-product.Category}}. Age: {{get-product.AgeRating}}. Dimensions: {{get-product.Dimensions}}. Weight: {{get-product.Weight}}. Materials: {{get-product.Materials}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_PRODUCT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: products
          path: "/ProductDetailSet('{{sku}}')"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: get-product-details
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://hasbro.atlassian.net/wiki/api/v2"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST

Collects consumer reviews from Zendesk, analyzes sentiment via Azure Machine Learning, stores insights in Snowflake, and publishes a summary to Confluence.

naftiko: "0.5"
info:
  label: "Consumer Feedback Analysis Pipeline"
  description: "Collects consumer reviews from Zendesk, analyzes sentiment via Azure Machine Learning, stores insights in Snowflake, and publishes a summary to Confluence."
  tags:
    - feedback
    - zendesk
    - azure-machine-learning
    - snowflake
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: feedback-analysis
      port: 8080
      tools:
        - name: analyze-feedback
          description: "Orchestrate consumer feedback analysis across Zendesk, Azure ML, Snowflake, and Confluence."
          inputParameters:
            - name: product_sku
              in: body
              type: string
              description: "The product SKU to analyze feedback for."
            - name: date_range
              in: body
              type: string
              description: "The date range for feedback collection."
          steps:
            - name: collect-reviews
              type: call
              call: "zendesk.search-tickets"
              with:
                query: "product:{{product_sku}} created:{{date_range}}"
            - name: analyze-sentiment
              type: call
              call: "azureml.score-sentiment"
              with:
                texts: "{{collect-reviews.results}}"
            - name: store-insights
              type: call
              call: "snowflake.insert-data"
              with:
                table: "CONSUMER_SENTIMENT"
                data: "{{analyze-sentiment.predictions}}"
            - name: publish-summary
              type: call
              call: "confluence.create-page"
              with:
                space_key: "PRODUCT"
                title: "Feedback Analysis: {{product_sku}} - {{date_range}}"
                body: "Sentiment Score: {{analyze-sentiment.average_score}}. Total Reviews: {{collect-reviews.count}}"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://hasbro.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: search
          path: "/search.json"
          operations:
            - name: search-tickets
              method: GET
    - type: http
      namespace: azureml
      baseUri: "https://hasbro-ml.azureml.net"
      authentication:
        type: bearer
        token: "$secrets.azureml_token"
      resources:
        - name: scoring
          path: "/score"
          operations:
            - name: score-sentiment
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://hasbro.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: insert-data
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://hasbro.atlassian.net/wiki/api/v2"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST

Retrieves marketing content from SharePoint, translates via Azure Cognitive Services, uploads localized versions to Google Drive, and notifies regional teams via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Content Localization Pipeline"
  description: "Retrieves marketing content from SharePoint, translates via Azure Cognitive Services, uploads localized versions to Google Drive, and notifies regional teams via Microsoft Teams."
  tags:
    - localization
    - sharepoint
    - microsoft-azure
    - google-drive
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: content-localization
      port: 8080
      tools:
        - name: localize-content
          description: "Orchestrate content localization across SharePoint, Azure, Google Drive, and Teams."
          inputParameters:
            - name: document_id
              in: body
              type: string
              description: "The SharePoint document ID."
            - name: target_language
              in: body
              type: string
              description: "The target language code."
          steps:
            - name: get-content
              type: call
              call: "sharepoint.get-document"
              with:
                id: "{{document_id}}"
            - name: translate
              type: call
              call: "azure-translate.translate-text"
              with:
                text: "{{get-content.body}}"
                to: "{{target_language}}"
            - name: upload-localized
              type: call
              call: "gdrive.upload-file"
              with:
                folder: "Localized/{{target_language}}"
                content: "{{translate.translated_text}}"
            - name: notify-region
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "regional-marketing"
                text: "Localized content ready for {{target_language}}: {{upload-localized.webViewLink}}"
  consumes:
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites/hasbro"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: documents
          path: "/drive/items/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-document
              method: GET
    - type: http
      namespace: azure-translate
      baseUri: "https://api.cognitive.microsofttranslator.com"
      authentication:
        type: bearer
        token: "$secrets.azure_translate_key"
      resources:
        - name: translate
          path: "/translate?api-version=3.0&to={{to}}"
          inputParameters:
            - name: to
              in: path
          operations:
            - name: translate-text
              method: POST
    - type: http
      namespace: gdrive
      baseUri: "https://www.googleapis.com/upload/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_token"
      resources:
        - name: files
          path: "/files?uploadType=multipart"
          operations:
            - name: upload-file
              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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Queries expiring contracts from Salesforce, creates renewal tasks in Jira, sends reminders via Microsoft Outlook, and logs in Google Sheets.

naftiko: "0.5"
info:
  label: "Contract Renewal Reminder Pipeline"
  description: "Queries expiring contracts from Salesforce, creates renewal tasks in Jira, sends reminders via Microsoft Outlook, and logs in Google Sheets."
  tags:
    - legal
    - salesforce
    - jira
    - microsoft-outlook
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: contract-renewal
      port: 8080
      tools:
        - name: process-renewals
          description: "Orchestrate contract renewal reminders across Salesforce, Jira, Outlook, and Google Sheets."
          inputParameters:
            - name: days_before_expiry
              in: body
              type: string
              description: "Days before expiry to trigger reminders."
          steps:
            - name: get-expiring
              type: call
              call: "salesforce.query-contracts"
              with:
                filter: "expiring_within_days:{{days_before_expiry}}"
            - name: create-tasks
              type: call
              call: "jira.create-issue"
              with:
                project: "LEGAL"
                summary: "Contract Renewal Required"
                type: "Task"
            - name: send-reminders
              type: call
              call: "outlook.send-email"
              with:
                to: "legal-team@hasbro.com"
                subject: "Contract Renewals Due Within {{days_before_expiry}} Days"
                body: "{{get-expiring.count}} contracts require renewal. Jira: {{create-tasks.key}}"
            - name: log-renewals
              type: call
              call: "gsheets.append-row"
              with:
                spreadsheet_id: "contract-tracker"
                values: "{{get-expiring.contracts}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hasbro.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contracts
          path: "/query?q=SELECT+Id,Name+FROM+Contract"
          operations:
            - name: query-contracts
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://hasbro.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: 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/spreadsheets"
      authentication:
        type: bearer
        token: "$secrets.google_token"
      resources:
        - name: values
          path: "/{{spreadsheet_id}}/values/Sheet1:append?valueInputOption=RAW"
          inputParameters:
            - name: spreadsheet_id
              in: path
          operations:
            - name: append-row
              method: POST

Analyzes purchase history in Snowflake, generates product recommendations via Azure Machine Learning, publishes to BigCommerce, and sends personalized emails via MailChimp.

naftiko: "0.5"
info:
  label: "Cross-Sell Recommendation Pipeline"
  description: "Analyzes purchase history in Snowflake, generates product recommendations via Azure Machine Learning, publishes to BigCommerce, and sends personalized emails via MailChimp."
  tags:
    - e-commerce
    - snowflake
    - azure-machine-learning
    - bigcommerce
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: cross-sell
      port: 8080
      tools:
        - name: generate-recommendations
          description: "Orchestrate cross-sell recommendations across Snowflake, Azure ML, BigCommerce, and MailChimp."
          inputParameters:
            - name: customer_segment
              in: body
              type: string
              description: "The customer segment."
          steps:
            - name: get-purchase-history
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT * FROM PURCHASE_HISTORY WHERE segment='{{customer_segment}}'"
            - name: get-recommendations
              type: call
              call: "azureml.score-recommendations"
              with:
                data: "{{get-purchase-history.results}}"
            - name: update-storefront
              type: call
              call: "bigcommerce.update-recommendations"
              with:
                segment: "{{customer_segment}}"
                products: "{{get-recommendations.top_products}}"
            - name: send-emails
              type: call
              call: "mailchimp.send-campaign"
              with:
                list_id: "{{customer_segment}}"
                subject: "Products You Might Love"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://hasbro.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: azureml
      baseUri: "https://hasbro-ml.azureml.net"
      authentication:
        type: bearer
        token: "$secrets.azureml_token"
      resources:
        - name: scoring
          path: "/score"
          operations:
            - name: score-recommendations
              method: POST
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/hasbro/v3"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      resources:
        - name: recommendations
          path: "/catalog/products/recommendations"
          operations:
            - name: update-recommendations
              method: PUT
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_token"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: send-campaign
              method: POST

When a customer complaint arrives via Zendesk, retrieves order details from SAP, creates a Salesforce case, and notifies the product team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Customer Complaint Handler"
  description: "When a customer complaint arrives via Zendesk, retrieves order details from SAP, creates a Salesforce case, and notifies the product team in Microsoft Teams."
  tags:
    - customer-service
    - zendesk
    - sap
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: complaint-handling
      port: 8080
      tools:
        - name: handle-complaint
          description: "Process a customer complaint by pulling order data, creating a case, and alerting the product team."
          inputParameters:
            - name: zendesk_ticket_id
              in: body
              type: string
              description: "The Zendesk ticket ID."
            - name: order_number
              in: body
              type: string
              description: "The SAP sales order number."
          steps:
            - name: get-ticket
              type: call
              call: "zendesk.get-ticket"
              with:
                ticket_id: "{{zendesk_ticket_id}}"
            - name: get-order
              type: call
              call: "sap.get-order"
              with:
                order_number: "{{order_number}}"
            - name: create-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "Complaint: {{get-ticket.subject}}"
                description: "Zendesk #{{zendesk_ticket_id}}: {{get-ticket.description}}. Product: {{get-order.ProductName}}. Order: {{order_number}}."
            - name: notify-product
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "product-quality"
                text: "Customer complaint for {{get-order.ProductName}}: {{get-ticket.subject}}. SF Case: {{create-case.CaseNumber}}."
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://hasbro.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets/{{ticket_id}}"
          inputParameters:
            - name: ticket_id
              in: path
          operations:
            - name: get-ticket
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZSD_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: orders
          path: "/SalesOrderSet('{{order_number}}')"
          inputParameters:
            - name: order_number
              in: path
          operations:
            - name: get-order
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://hasbro.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Enrolls customers in loyalty via Salesforce, creates welcome email in MailChimp, provisions points in Stripe, and tracks enrollment in Snowflake.

naftiko: "0.5"
info:
  label: "Customer Loyalty Program Pipeline"
  description: "Enrolls customers in loyalty via Salesforce, creates welcome email in MailChimp, provisions points in Stripe, and tracks enrollment in Snowflake."
  tags:
    - loyalty
    - salesforce
    - mailchimp
    - stripe
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: loyalty-program
      port: 8080
      tools:
        - name: enroll-loyalty
          description: "Orchestrate loyalty program enrollment across Salesforce, MailChimp, Stripe, and Snowflake."
          inputParameters:
            - name: customer_email
              in: body
              type: string
              description: "The customer email."
            - name: tier
              in: body
              type: string
              description: "The loyalty tier."
          steps:
            - name: create-contact
              type: call
              call: "salesforce.create-contact"
              with:
                email: "{{customer_email}}"
                loyalty_tier: "{{tier}}"
            - name: send-welcome
              type: call
              call: "mailchimp.send-automation"
              with:
                workflow: "loyalty-welcome"
                email: "{{customer_email}}"
            - name: provision-points
              type: call
              call: "stripe.create-customer"
              with:
                email: "{{customer_email}}"
                metadata: "{\"loyalty_tier\":\"{{tier}}\"}"
            - name: log-enrollment
              type: call
              call: "snowflake.insert-data"
              with:
                table: "LOYALTY_ENROLLMENTS"
                email: "{{customer_email}}"
                tier: "{{tier}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hasbro.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: contacts
          path: "/sobjects/Contact"
          operations:
            - name: create-contact
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_token"
      resources:
        - name: automations
          path: "/automations"
          operations:
            - name: send-automation
              method: POST
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: customers
          path: "/customers"
          operations:
            - name: create-customer
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://hasbro.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: insert-data
              method: POST

Processes a customer return by creating a Zendesk ticket, initiating refund via Stripe, updating inventory in SAP, and logging the return in Snowflake.

naftiko: "0.5"
info:
  label: "Customer Returns Processing Pipeline"
  description: "Processes a customer return by creating a Zendesk ticket, initiating refund via Stripe, updating inventory in SAP, and logging the return in Snowflake."
  tags:
    - returns
    - zendesk
    - stripe
    - sap
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: returns-processing
      port: 8080
      tools:
        - name: process-return
          description: "Orchestrate customer returns across Zendesk, Stripe, SAP, and Snowflake."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The order ID."
            - name: reason
              in: body
              type: string
              description: "The return reason."
          steps:
            - name: create-ticket
              type: call
              call: "zendesk.create-ticket"
              with:
                subject: "Return: Order {{order_id}}"
                description: "{{reason}}"
            - name: process-refund
              type: call
              call: "stripe.create-refund"
              with:
                payment_intent: "{{order_id}}"
            - name: update-inventory
              type: call
              call: "sap.update-inventory"
              with:
                order_id: "{{order_id}}"
                type: "return"
            - name: log-return
              type: call
              call: "snowflake.insert-data"
              with:
                table: "RETURNS_LOG"
                order_id: "{{order_id}}"
                reason: "{{reason}}"
                refund_id: "{{process-refund.id}}"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://hasbro.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets"
          operations:
            - name: create-ticket
              method: POST
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: refunds
          path: "/refunds"
          operations:
            - name: create-refund
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZINVENTORY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: inventory
          path: "/InventoryAdjustment"
          operations:
            - name: update-inventory
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://hasbro.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: insert-data
              method: POST

Escalates a Zendesk ticket, creates a Jira follow-up issue, notifies the customer success team via Slack, and logs the escalation in Snowflake.

naftiko: "0.5"
info:
  label: "Customer Service Escalation Pipeline"
  description: "Escalates a Zendesk ticket, creates a Jira follow-up issue, notifies the customer success team via Slack, and logs the escalation in Snowflake."
  tags:
    - customer-service
    - zendesk
    - jira
    - slack
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: service-escalation
      port: 8080
      tools:
        - name: escalate-ticket
          description: "Orchestrate customer service escalation across Zendesk, Jira, Slack, and Snowflake."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The Zendesk ticket ID."
            - name: reason
              in: body
              type: string
              description: "The escalation reason."
          steps:
            - name: update-ticket
              type: call
              call: "zendesk.update-ticket"
              with:
                id: "{{ticket_id}}"
                priority: "urgent"
                tags: "escalated"
            - name: create-followup
              type: call
              call: "jira.create-issue"
              with:
                project: "CS"
                summary: "Escalation: Zendesk #{{ticket_id}}"
                description: "{{reason}}"
            - name: notify-team
              type: call
              call: "slack.post-message"
              with:
                channel: "customer-escalations"
                text: "Ticket #{{ticket_id}} escalated: {{reason}}. Jira: {{create-followup.key}}"
            - name: log-escalation
              type: call
              call: "snowflake.insert-data"
              with:
                table: "ESCALATION_LOG"
                ticket_id: "{{ticket_id}}"
                reason: "{{reason}}"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://hasbro.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: update-ticket
              method: PUT
    - type: http
      namespace: jira
      baseUri: "https://hasbro.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://hasbro.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: insert-data
              method: POST

Retrieves infrastructure health metrics from Datadog for a Hasbro service.

naftiko: "0.5"
info:
  label: "Datadog Service Health Check"
  description: "Retrieves infrastructure health metrics from Datadog for a Hasbro service."
  tags:
    - it-operations
    - monitoring
    - datadog
capability:
  exposes:
    - type: mcp
      namespace: infra-monitoring
      port: 8080
      tools:
        - name: get-service-health
          description: "Get Datadog health metrics for a service."
          inputParameters:
            - name: service_name
              in: body
              type: string
              description: "The Datadog service name."
          call: "datadog.get-metrics"
          with:
            service: "{{service_name}}"
          outputParameters:
            - name: cpu_usage
              type: string
              mapping: "$.series[0].pointlist[-1][1]"
            - name: memory_usage
              type: string
              mapping: "$.series[1].pointlist[-1][1]"
            - name: error_rate
              type: string
              mapping: "$.series[2].pointlist[-1][1]"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: apiKey
        key: "$secrets.datadog_api_key"
        headerName: "DD-API-KEY"
      resources:
        - name: metrics
          path: "/query?query=avg:system.cpu.user{service:{{service}}}"
          inputParameters:
            - name: service
              in: path
          operations:
            - name: get-metrics
              method: GET

Pulls historical sales from SAP, runs demand forecast in Azure Machine Learning, updates inventory targets, and shares results to Confluence.

naftiko: "0.5"
info:
  label: "Demand Forecasting Pipeline"
  description: "Pulls historical sales from SAP, runs demand forecast in Azure Machine Learning, updates inventory targets, and shares results to Confluence."
  tags:
    - planning
    - forecasting
    - sap
    - azure-machine-learning
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: demand-forecast
      port: 8080
      tools:
        - name: run-demand-forecast
          description: "Run a demand forecast for a product line and publish results."
          inputParameters:
            - name: product_line
              in: body
              type: string
              description: "The product line to forecast."
            - name: forecast_horizon
              in: body
              type: string
              description: "Forecast horizon (e.g. 6_months, 12_months)."
          steps:
            - name: get-history
              type: call
              call: "sap.get-sales-history"
              with:
                product_line: "{{product_line}}"
            - name: run-forecast
              type: call
              call: "azml.run-inference"
              with:
                model_name: "demand_forecast"
                input_data: "{{get-history.data}}"
                horizon: "{{forecast_horizon}}"
            - name: publish-results
              type: call
              call: "confluence.create-page"
              with:
                space_key: "PLAN"
                title: "Demand Forecast: {{product_line}} - {{forecast_horizon}}"
                body: "Forecasted units: {{run-forecast.predicted_units}}. Confidence: {{run-forecast.confidence_interval}}. Recommended stock: {{run-forecast.recommended_stock}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZSD_SALES_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: sales-history
          path: "/SalesHistorySet?$filter=ProductLine eq '{{product_line}}'"
          inputParameters:
            - name: product_line
              in: query
          operations:
            - name: get-sales-history
              method: GET
    - type: http
      namespace: azml
      baseUri: "https://hasbro-ml.azureml.ms/score"
      authentication:
        type: bearer
        token: "$secrets.azml_token"
      resources:
        - name: inference
          path: "/{{model_name}}"
          inputParameters:
            - name: model_name
              in: path
          operations:
            - name: run-inference
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://hasbro.atlassian.net/wiki/api/v2"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST

On digital game release, triggers the Unity build pipeline via Azure DevOps, publishes release notes to Confluence, posts announcement to Discord, and updates the product listing on BigCommerce.

naftiko: "0.5"
info:
  label: "Digital Game Release Pipeline"
  description: "On digital game release, triggers the Unity build pipeline via Azure DevOps, publishes release notes to Confluence, posts announcement to Discord, and updates the product listing on BigCommerce."
  tags:
    - gaming
    - azure-devops
    - confluence
    - discord
    - bigcommerce
capability:
  exposes:
    - type: mcp
      namespace: game-release
      port: 8080
      tools:
        - name: release-game
          description: "Orchestrate a digital game release across Azure DevOps, Confluence, Discord, and BigCommerce."
          inputParameters:
            - name: game_title
              in: body
              type: string
              description: "The game title."
            - name: version
              in: body
              type: string
              description: "The release version."
          steps:
            - name: trigger-build
              type: call
              call: "azuredevops.queue-build"
              with:
                definition_id: "game-build-pipeline"
                parameters: "{\"game\":\"{{game_title}}\",\"version\":\"{{version}}\"}"
            - name: publish-notes
              type: call
              call: "confluence.create-page"
              with:
                space_key: "GAMES"
                title: "{{game_title}} v{{version}} Release Notes"
                parent_id: "release-notes"
            - name: announce-discord
              type: call
              call: "discord.send-message"
              with:
                channel_id: "game-releases"
                content: "{{game_title}} v{{version}} is now available! Build: {{trigger-build.buildId}}"
            - name: update-listing
              type: call
              call: "bigcommerce.update-product"
              with:
                name: "{{game_title}}"
                version: "{{version}}"
  consumes:
    - type: http
      namespace: azuredevops
      baseUri: "https://dev.azure.com/hasbro/games/_apis"
      authentication:
        type: bearer
        token: "$secrets.azuredevops_token"
      resources:
        - name: builds
          path: "/build/builds?api-version=7.0"
          operations:
            - name: queue-build
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://hasbro.atlassian.net/wiki/api/v2"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: discord
      baseUri: "https://discord.com/api/v10"
      authentication:
        type: bearer
        token: "$secrets.discord_bot_token"
      resources:
        - name: messages
          path: "/channels/{{channel_id}}/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/hasbro/v3"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      resources:
        - name: products
          path: "/catalog/products"
          operations:
            - name: update-product
              method: PUT

Retrieves the status of a DocuSign envelope by envelope ID, returning signing status, sender, and completion date.

naftiko: "0.5"
info:
  label: "DocuSign Contract Status Lookup"
  description: "Retrieves the status of a DocuSign envelope by envelope ID, returning signing status, sender, and completion date."
  tags:
    - legal
    - docusign
capability:
  exposes:
    - type: mcp
      namespace: docusign-contracts
      port: 8080
      tools:
        - name: get-envelope-status
          description: "Look up a DocuSign envelope status by ID."
          inputParameters:
            - name: envelope_id
              in: body
              type: string
              description: "The DocuSign envelope ID."
          call: "docusign.get-envelope"
          with:
            id: "{{envelope_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: sender
              type: string
              mapping: "$.sender.userName"
  consumes:
    - type: http
      namespace: docusign
      baseUri: "https://na4.docusign.net/restapi/v2.1/accounts/hasbro"
      authentication:
        type: bearer
        token: "$secrets.docusign_token"
      resources:
        - name: envelopes
          path: "/envelopes/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-envelope
              method: GET

Detects abandoned carts in BigCommerce, sends recovery emails via MailChimp, logs events in Snowflake, and updates metrics in Google Analytics.

naftiko: "0.5"
info:
  label: "E-commerce Cart Abandonment Pipeline"
  description: "Detects abandoned carts in BigCommerce, sends recovery emails via MailChimp, logs events in Snowflake, and updates metrics in Google Analytics."
  tags:
    - e-commerce
    - bigcommerce
    - mailchimp
    - snowflake
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: cart-abandonment
      port: 8080
      tools:
        - name: recover-abandoned-cart
          description: "Orchestrate cart abandonment recovery across BigCommerce, MailChimp, Snowflake, and Google Analytics."
          inputParameters:
            - name: cart_id
              in: body
              type: string
              description: "The abandoned cart ID."
          steps:
            - name: get-cart
              type: call
              call: "bigcommerce.get-cart"
              with:
                id: "{{cart_id}}"
            - name: send-recovery-email
              type: call
              call: "mailchimp.send-automation"
              with:
                workflow: "cart-recovery"
                email: "{{get-cart.email}}"
                cart_value: "{{get-cart.cart_amount}}"
            - name: log-event
              type: call
              call: "snowflake.insert-data"
              with:
                table: "CART_ABANDONMENT"
                cart_id: "{{cart_id}}"
                value: "{{get-cart.cart_amount}}"
            - name: track-event
              type: call
              call: "ga.send-event"
              with:
                category: "ecommerce"
                action: "cart_recovery_sent"
                label: "{{cart_id}}"
  consumes:
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/hasbro/v3"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      resources:
        - name: carts
          path: "/carts/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-cart
              method: GET
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_token"
      resources:
        - name: automations
          path: "/automations"
          operations:
            - name: send-automation
              method: POST
    - type: http
      namespace: snowflake
      baseUri: "https://hasbro.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: insert-data
              method: POST
    - type: http
      namespace: ga
      baseUri: "https://www.google-analytics.com"
      authentication:
        type: bearer
        token: "$secrets.google_token"
      resources:
        - name: collect
          path: "/mp/collect"
          operations:
            - name: send-event
              method: POST

On employee departure, deactivates the Workday profile, revokes access in Azure Active Directory, creates an IT ticket in ServiceNow, and archives documents in Box.

naftiko: "0.5"
info:
  label: "Employee Offboarding Orchestrator"
  description: "On employee departure, deactivates the Workday profile, revokes access in Azure Active Directory, creates an IT ticket in ServiceNow, and archives documents in Box."
  tags:
    - hr
    - workday
    - azure-active-directory
    - servicenow
    - box
capability:
  exposes:
    - type: mcp
      namespace: employee-offboarding
      port: 8080
      tools:
        - name: offboard-employee
          description: "Orchestrate employee offboarding across Workday, Azure AD, ServiceNow, and Box."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The employee ID."
            - name: last_day
              in: body
              type: string
              description: "The last working day."
          steps:
            - name: deactivate-workday
              type: call
              call: "workday.deactivate-worker"
              with:
                id: "{{employee_id}}"
                termination_date: "{{last_day}}"
            - name: revoke-access
              type: call
              call: "azuread.disable-user"
              with:
                employee_id: "{{employee_id}}"
            - name: create-it-ticket
              type: call
              call: "servicenow.create-request"
              with:
                type: "Offboarding"
                description: "Offboard employee {{employee_id}}. Last day: {{last_day}}"
            - name: archive-docs
              type: call
              call: "box.move-folder"
              with:
                source: "employees/{{employee_id}}"
                destination: "archived-employees/{{employee_id}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/service/hasbro"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/Human_Resources/Workers/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: deactivate-worker
              method: PATCH
    - type: http
      namespace: azuread
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users/{{employee_id}}"
          inputParameters:
            - name: employee_id
              in: path
          operations:
            - name: disable-user
              method: PATCH
    - type: http
      namespace: servicenow
      baseUri: "https://hasbro.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: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: folders
          path: "/folders/{{source}}"
          inputParameters:
            - name: source
              in: path
          operations:
            - name: move-folder
              method: PUT

On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder, and sends a Microsoft Teams welcome message.

naftiko: "0.5"
info:
  label: "Employee Onboarding Orchestrator"
  description: "On new hire creation in Workday, opens a ServiceNow onboarding ticket, provisions a SharePoint folder, and sends a Microsoft Teams welcome message."
  tags:
    - hr
    - onboarding
    - workday
    - servicenow
    - sharepoint
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: hr-onboarding
      port: 8080
      tools:
        - name: trigger-onboarding
          description: "Orchestrate onboarding for a new Hasbro employee."
          inputParameters:
            - name: workday_employee_id
              in: body
              type: string
              description: "The Workday worker ID."
            - name: start_date
              in: body
              type: string
              description: "Start date in YYYY-MM-DD format."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                worker_id: "{{workday_employee_id}}"
            - name: open-ticket
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Onboarding: {{get-employee.full_name}}"
                category: "hr_onboarding"
                assigned_group: "IT_Onboarding"
            - name: provision-folder
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "hr_onboarding_site"
                folder_path: "OnboardingDocs/{{get-employee.full_name}}_{{start_date}}"
            - name: send-welcome
              type: call
              call: "msteams.send-message"
              with:
                recipient_upn: "{{get-employee.work_email}}"
                text: "Welcome to Hasbro, {{get-employee.first_name}}! Onboarding ticket: {{open-ticket.number}}. Documents: {{provision-folder.url}}."
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/workers/{{worker_id}}"
          inputParameters:
            - name: worker_id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://hasbro.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: messages
          path: "/users/{{recipient_upn}}/sendMail"
          inputParameters:
            - name: recipient_upn
              in: path
          operations:
            - name: send-message
              method: POST

Creates a Facebook ad campaign, syncs audience from Salesforce, uploads creative assets from Box, and tracks performance in Google Sheets.

naftiko: "0.5"
info:
  label: "Facebook Ad Campaign Orchestrator"
  description: "Creates a Facebook ad campaign, syncs audience from Salesforce, uploads creative assets from Box, and tracks performance in Google Sheets."
  tags:
    - advertising
    - facebook
    - salesforce
    - box
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: fb-ad-campaign
      port: 8080
      tools:
        - name: launch-ad-campaign
          description: "Orchestrate Facebook ad campaign across Facebook, Salesforce, Box, and Google Sheets."
          inputParameters:
            - name: campaign_name
              in: body
              type: string
              description: "The campaign name."
            - name: budget
              in: body
              type: string
              description: "The daily budget."
          steps:
            - name: create-campaign
              type: call
              call: "facebook.create-campaign"
              with:
                name: "{{campaign_name}}"
                daily_budget: "{{budget}}"
                objective: "BRAND_AWARENESS"
            - name: sync-audience
              type: call
              call: "salesforce.get-audience"
              with:
                segment: "toy-buyers"
            - name: upload-creatives
              type: call
              call: "box.get-folder-items"
              with:
                folder_id: "ad-creatives"
            - name: setup-tracking
              type: call
              call: "gsheets.create-sheet"
              with:
                spreadsheet_id: "ad-performance"
                title: "{{campaign_name}}"
  consumes:
    - type: http
      namespace: facebook
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.facebook_token"
      resources:
        - name: campaigns
          path: "/act_hasbro/campaigns"
          operations:
            - name: create-campaign
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://hasbro.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: audiences
          path: "/sobjects/Campaign"
          operations:
            - name: get-audience
              method: GET
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: folders
          path: "/folders/{{folder_id}}/items"
          inputParameters:
            - name: folder_id
              in: path
          operations:
            - name: get-folder-items
              method: GET
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
      authentication:
        type: bearer
        token: "$secrets.google_token"
      resources:
        - name: sheets
          path: "/{{spreadsheet_id}}/sheets"
          inputParameters:
            - name: spreadsheet_id
              in: path
          operations:
            - name: create-sheet
              method: POST

Retrieves a Figma design file by key, returning file name, last modified date, and thumbnail URL.

naftiko: "0.5"
info:
  label: "Figma Design File Lookup"
  description: "Retrieves a Figma design file by key, returning file name, last modified date, and thumbnail URL."
  tags:
    - design
    - figma
capability:
  exposes:
    - type: mcp
      namespace: figma-files
      port: 8080
      tools:
        - name: get-design-file
          description: "Look up a Figma design file by file key."
          inputParameters:
            - name: file_key
              in: body
              type: string
              description: "The Figma file key."
          call: "figma.get-file"
          with:
            key: "{{file_key}}"
          outputParameters:
            - name: file_name
              type: string
              mapping: "$.name"
            - name: last_modified
              type: string
              mapping: "$.lastModified"
            - name: thumbnail_url
              type: string
              mapping: "$.thumbnailUrl"
  consumes:
    - type: http
      namespace: figma
      baseUri: "https://api.figma.com/v1"
      authentication:
        type: bearer
        token: "$secrets.figma_token"
      resources:
        - name: files
          path: "/files/{{key}}"
          inputParameters:
            - name: key
              in: path
          operations:
            - name: get-file
              method: GET

Updates product pricing in SAP, syncs to BigCommerce storefront, logs changes in Snowflake audit trail, and notifies sales teams via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Global Pricing Update Orchestrator"
  description: "Updates product pricing in SAP, syncs to BigCommerce storefront, logs changes in Snowflake audit trail, and notifies sales teams via Microsoft Teams."
  tags:
    - pricing
    - sap
    - bigcommerce
    - snowflake
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: pricing-update
      port: 8080
      tools:
        - name: update-pricing
          description: "Orchestrate global pricing update across SAP, BigCommerce, Snowflake, and Teams."
          inputParameters:
            - name: product_sku
              in: body
              type: string
              description: "The product SKU."
            - name: new_price
              in: body
              type: string
              description: "The new price."
            - name: region
              in: body
              type: string
              description: "The pricing region."
          steps:
            - name: update-sap-price
              type: call
              call: "sap.update-pricing"
              with:
                sku: "{{product_sku}}"
                price: "{{new_price}}"
                region: "{{region}}"
            - name: sync-storefront
              type: call
              call: "bigcommerce.update-product-price"
              with:
                sku: "{{product_sku}}"
                price: "{{new_price}}"
            - name: log-change
              type: call
              call: "snowflake.insert-audit"
              with:
                table: "PRICING_AUDIT"
                sku: "{{product_sku}}"
                new_price: "{{new_price}}"
                region: "{{region}}"
            - name: notify-sales
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "sales-team"
                text: "Pricing updated for {{product_sku}} in {{region}}: ${{new_price}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPRICING_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: pricing
          path: "/PricingSet('{{sku}}')"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: update-pricing
              method: PATCH
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/hasbro/v3"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      resources:
        - name: products
          path: "/catalog/products"
          operations:
            - name: update-product-price
              method: PUT
    - type: http
      namespace: snowflake
      baseUri: "https://hasbro.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: insert-audit
              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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves web traffic metrics from Google Analytics for a product page, returning page views, bounce rate, and conversion rate.

naftiko: "0.5"
info:
  label: "Google Analytics Web Traffic Report"
  description: "Retrieves web traffic metrics from Google Analytics for a product page, returning page views, bounce rate, and conversion rate."
  tags:
    - marketing
    - analytics
    - google-analytics
capability:
  exposes:
    - type: mcp
      namespace: web-analytics
      port: 8080
      tools:
        - name: get-product-traffic
          description: "Get web traffic metrics for a product page from Google Analytics."
          inputParameters:
            - name: product_page_path
              in: body
              type: string
              description: "The product page URL path."
          call: "ga.get-page-metrics"
          with:
            page_path: "{{product_page_path}}"
          outputParameters:
            - name: page_views
              type: integer
              mapping: "$.rows[0].metricValues[0].value"
            - name: bounce_rate
              type: string
              mapping: "$.rows[0].metricValues[1].value"
            - name: conversion_rate
              type: string
              mapping: "$.rows[0].metricValues[2].value"
  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"
          inputParameters:
            - name: property_id
              in: path
          operations:
            - name: get-page-metrics
              method: POST

Uploads a product asset file to a specified Google Drive folder.

naftiko: "0.5"
info:
  label: "Google Drive Asset Repository"
  description: "Uploads a product asset file to a specified Google Drive folder."
  tags:
    - document-management
    - google-drive
capability:
  exposes:
    - type: mcp
      namespace: gdrive-assets
      port: 8080
      tools:
        - name: upload-asset
          description: "Upload a product asset to Google Drive."
          inputParameters:
            - name: folder_id
              in: body
              type: string
              description: "The Google Drive folder ID."
            - name: file_name
              in: body
              type: string
              description: "The file name."
            - name: content
              in: body
              type: string
              description: "The file content."
          call: "gdrive.upload-file"
          with:
            folder_id: "{{folder_id}}"
            name: "{{file_name}}"
            content: "{{content}}"
          outputParameters:
            - name: file_id
              type: string
              mapping: "$.id"
            - name: web_view_link
              type: string
              mapping: "$.webViewLink"
  consumes:
    - type: http
      namespace: gdrive
      baseUri: "https://www.googleapis.com/upload/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_drive_token"
      resources:
        - name: files
          path: "/files?uploadType=multipart"
          operations:
            - name: upload-file
              method: POST

Pulls inventory data from SAP and writes it to a Google Sheets dashboard for retail operations visibility.

naftiko: "0.5"
info:
  label: "Google Sheets Retail Inventory Dashboard"
  description: "Pulls inventory data from SAP and writes it to a Google Sheets dashboard for retail operations visibility."
  tags:
    - retail
    - reporting
    - google-sheets
    - sap
capability:
  exposes:
    - type: mcp
      namespace: sheets-inventory
      port: 8080
      tools:
        - name: sync-inventory-dashboard
          description: "Pull SAP inventory data and update Google Sheets."
          inputParameters:
            - name: spreadsheet_id
              in: body
              type: string
              description: "The Google Sheets ID."
            - name: warehouse_code
              in: body
              type: string
              description: "The warehouse code."
          steps:
            - name: get-inventory
              type: call
              call: "sap.get-warehouse-inventory"
              with:
                warehouse: "{{warehouse_code}}"
            - name: update-sheet
              type: call
              call: "gsheets.update-values"
              with:
                spreadsheet_id: "{{spreadsheet_id}}"
                range: "Inventory!A2:D2"
                values:
                  - - "{{warehouse_code}}"
                    - "{{get-inventory.total_skus}}"
                    - "{{get-inventory.total_units}}"
                    - "{{get-inventory.fill_rate}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_INVENTORY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: warehouse-inventory
          path: "/WarehouseInventorySet('{{warehouse}}')"
          inputParameters:
            - name: warehouse
              in: path
          operations:
            - name: get-warehouse-inventory
              method: GET
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
      authentication:
        type: bearer
        token: "$secrets.google_sheets_token"
      resources:
        - name: values
          path: "/{{spreadsheet_id}}/values/{{range}}"
          inputParameters:
            - name: spreadsheet_id
              in: path
            - name: range
              in: path
          operations:
            - name: update-values
              method: PUT

Publishes a Google Tag Manager container version for a Hasbro web property.

naftiko: "0.5"
info:
  label: "Google Tag Manager Container Publish"
  description: "Publishes a Google Tag Manager container version for a Hasbro web property."
  tags:
    - marketing
    - analytics
    - google-tag-manager
capability:
  exposes:
    - type: mcp
      namespace: tag-management
      port: 8080
      tools:
        - name: publish-gtm-container
          description: "Publish a GTM container version."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The GTM account ID."
            - name: container_id
              in: body
              type: string
              description: "The GTM container ID."
            - name: version_id
              in: body
              type: string
              description: "The version to publish."
          call: "gtm.publish-version"
          with:
            account_id: "{{account_id}}"
            container_id: "{{container_id}}"
            version_id: "{{version_id}}"
  consumes:
    - type: http
      namespace: gtm
      baseUri: "https://www.googleapis.com/tagmanager/v2"
      authentication:
        type: bearer
        token: "$secrets.gtm_token"
      resources:
        - name: versions
          path: "/accounts/{{account_id}}/containers/{{container_id}}/versions/{{version_id}}:publish"
          inputParameters:
            - name: account_id
              in: path
            - name: container_id
              in: path
            - name: version_id
              in: path
          operations:
            - name: publish-version
              method: POST

On low-stock alert, checks SAP inventory levels, creates a replenishment purchase order, notifies the supply chain team via Slack, and updates the Google Sheets demand tracker.

naftiko: "0.5"
info:
  label: "Holiday Inventory Replenishment Pipeline"
  description: "On low-stock alert, checks SAP inventory levels, creates a replenishment purchase order, notifies the supply chain team via Slack, and updates the Google Sheets demand tracker."
  tags:
    - inventory
    - sap
    - slack
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: holiday-replenishment
      port: 8080
      tools:
        - name: replenish-inventory
          description: "Orchestrate holiday inventory replenishment across SAP, Slack, and Google Sheets."
          inputParameters:
            - name: product_sku
              in: body
              type: string
              description: "The product SKU."
            - name: target_quantity
              in: body
              type: string
              description: "The target restock quantity."
          steps:
            - name: check-stock
              type: call
              call: "sap.get-stock-level"
              with:
                sku: "{{product_sku}}"
            - name: create-po
              type: call
              call: "sap.create-purchase-order"
              with:
                material: "{{product_sku}}"
                quantity: "{{target_quantity}}"
            - name: notify-team
              type: call
              call: "slack.post-message"
              with:
                channel: "supply-chain"
                text: "Replenishment PO {{create-po.PONumber}} created for {{product_sku}}. Qty: {{target_quantity}}"
            - name: update-tracker
              type: call
              call: "gsheets.append-row"
              with:
                spreadsheet_id: "demand-tracker"
                values: "{{product_sku}},{{target_quantity}},{{create-po.PONumber}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZINVENTORY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: stock
          path: "/StockLevelSet('{{sku}}')"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: get-stock-level
              method: GET
        - name: purchase-orders
          path: "/PurchaseOrderSet"
          operations:
            - name: create-purchase-order
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
      authentication:
        type: bearer
        token: "$secrets.google_token"
      resources:
        - name: values
          path: "/{{spreadsheet_id}}/values/Sheet1:append?valueInputOption=RAW"
          inputParameters:
            - name: spreadsheet_id
              in: path
          operations:
            - name: append-row
              method: POST

Retrieves a HubSpot contact by email, returning name, company, lifecycle stage, and last activity date.

naftiko: "0.5"
info:
  label: "HubSpot Contact Lookup"
  description: "Retrieves a HubSpot contact by email, returning name, company, lifecycle stage, and last activity date."
  tags:
    - marketing
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: hubspot-contacts
      port: 8080
      tools:
        - name: get-contact
          description: "Look up a HubSpot contact by email address."
          inputParameters:
            - name: email
              in: body
              type: string
              description: "The contact email address."
          call: "hubspot.get-contact"
          with:
            email: "{{email}}"
          outputParameters:
            - name: full_name
              type: string
              mapping: "$.properties.firstname"
            - name: company
              type: string
              mapping: "$.properties.company"
            - name: lifecycle_stage
              type: string
              mapping: "$.properties.lifecyclestage"
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: contacts
          path: "/crm/v3/objects/contacts/{{email}}?idProperty=email"
          inputParameters:
            - name: email
              in: path
          operations:
            - name: get-contact
              method: GET

Creates an influencer campaign in HubSpot, generates a contract via DocuSign, tracks deliverables in Asana, and monitors social metrics via Instagram API.

naftiko: "0.5"
info:
  label: "Influencer Collaboration Pipeline"
  description: "Creates an influencer campaign in HubSpot, generates a contract via DocuSign, tracks deliverables in Asana, and monitors social metrics via Instagram API."
  tags:
    - marketing
    - hubspot
    - docusign
    - asana
    - instagram
capability:
  exposes:
    - type: mcp
      namespace: influencer-collab
      port: 8080
      tools:
        - name: launch-influencer-campaign
          description: "Orchestrate influencer collaboration across HubSpot, DocuSign, Asana, and Instagram."
          inputParameters:
            - name: influencer_name
              in: body
              type: string
              description: "The influencer name."
            - name: campaign_name
              in: body
              type: string
              description: "The campaign name."
          steps:
            - name: create-campaign
              type: call
              call: "hubspot.create-campaign"
              with:
                name: "{{campaign_name}} - {{influencer_name}}"
            - name: create-contract
              type: call
              call: "docusign.create-envelope"
              with:
                template_id: "influencer_contract"
                signer_name: "{{influencer_name}}"
            - name: create-deliverables
              type: call
              call: "asana.create-task"
              with:
                name: "{{influencer_name}} Deliverables - {{campaign_name}}"
                project: "influencer-campaigns"
            - name: setup-tracking
              type: call
              call: "instagram.create-media-tracker"
              with:
                campaign_id: "{{create-campaign.id}}"
                hashtag: "#Hasbro{{campaign_name}}"
  consumes:
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: campaigns
          path: "/marketing/v3/campaigns"
          operations:
            - name: create-campaign
              method: POST
    - type: http
      namespace: docusign
      baseUri: "https://na4.docusign.net/restapi/v2.1/accounts/hasbro"
      authentication:
        type: bearer
        token: "$secrets.docusign_token"
      resources:
        - name: envelopes
          path: "/envelopes"
          operations:
            - name: create-envelope
              method: POST
    - type: http
      namespace: asana
      baseUri: "https://app.asana.com/api/1.0"
      authentication:
        type: bearer
        token: "$secrets.asana_token"
      resources:
        - name: tasks
          path: "/tasks"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: instagram
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: media-tracker
          path: "/ig_hashtag_search"
          operations:
            - name: create-media-tracker
              method: GET

Retrieves engagement metrics for an Instagram post by media ID, returning impressions, reach, likes, and comments count.

naftiko: "0.5"
info:
  label: "Instagram Post Metrics Lookup"
  description: "Retrieves engagement metrics for an Instagram post by media ID, returning impressions, reach, likes, and comments count."
  tags:
    - social-media
    - instagram
capability:
  exposes:
    - type: mcp
      namespace: instagram-metrics
      port: 8080
      tools:
        - name: get-post-metrics
          description: "Look up Instagram post engagement metrics by media ID."
          inputParameters:
            - name: media_id
              in: body
              type: string
              description: "The Instagram media ID."
          call: "instagram.get-insights"
          with:
            id: "{{media_id}}"
          outputParameters:
            - name: impressions
              type: string
              mapping: "$.data[0].values[0].value"
            - name: reach
              type: string
              mapping: "$.data[1].values[0].value"
  consumes:
    - type: http
      namespace: instagram
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.instagram_token"
      resources:
        - name: media-insights
          path: "/{{id}}/insights?metric=impressions,reach"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-insights
              method: GET

Monitors social media mentions via HubSpot, checks against brand trademark data in SAP, creates a Jira legal task, and alerts the legal team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "IP Infringement Detection Pipeline"
  description: "Monitors social media mentions via HubSpot, checks against brand trademark data in SAP, creates a Jira legal task, and alerts the legal team in Microsoft Teams."
  tags:
    - legal
    - intellectual-property
    - hubspot
    - sap
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: ip-protection
      port: 8080
      tools:
        - name: flag-ip-infringement
          description: "Flag a potential IP infringement, check trademarks, and escalate to legal."
          inputParameters:
            - name: mention_url
              in: body
              type: string
              description: "The URL of the suspected infringing content."
            - name: brand_name
              in: body
              type: string
              description: "The Hasbro brand or trademark name."
          steps:
            - name: get-trademark
              type: call
              call: "sap.get-trademark"
              with:
                brand: "{{brand_name}}"
            - name: create-legal-task
              type: call
              call: "jira.create-issue"
              with:
                project_key: "LEGAL"
                summary: "IP infringement: {{brand_name}}"
                issue_type: "Task"
                priority: "High"
                description: "Suspected IP infringement for {{brand_name}} (TM #{{get-trademark.registration_number}}). URL: {{mention_url}}."
            - name: notify-legal
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "legal-ip"
                text: "IP Alert: Suspected infringement for {{brand_name}}. Jira: {{create-legal-task.key}}. URL: {{mention_url}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZLI_IP_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: trademarks
          path: "/TrademarkSet('{{brand}}')"
          inputParameters:
            - name: brand
              in: path
          operations:
            - name: get-trademark
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://hasbro.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

On critical alert from Datadog, creates a ServiceNow incident, pages on-call via Slack, opens a Zoom bridge, and updates the status page.

naftiko: "0.5"
info:
  label: "IT Incident Escalation Pipeline"
  description: "On critical alert from Datadog, creates a ServiceNow incident, pages on-call via Slack, opens a Zoom bridge, and updates the status page."
  tags:
    - incident
    - datadog
    - servicenow
    - slack
    - zoom
capability:
  exposes:
    - type: mcp
      namespace: incident-escalation
      port: 8080
      tools:
        - name: escalate-incident
          description: "Orchestrate IT incident escalation across Datadog, ServiceNow, Slack, and Zoom."
          inputParameters:
            - name: alert_id
              in: body
              type: string
              description: "The Datadog alert ID."
            - name: severity
              in: body
              type: string
              description: "The incident severity."
          steps:
            - name: get-alert
              type: call
              call: "datadog.get-alert"
              with:
                id: "{{alert_id}}"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "{{get-alert.title}}"
                urgency: "{{severity}}"
                category: "Infrastructure"
            - name: page-oncall
              type: call
              call: "slack.post-message"
              with:
                channel: "incident-response"
                text: "P{{severity}} INCIDENT: {{get-alert.title}}. ServiceNow: {{create-incident.number}}"
            - name: create-bridge
              type: call
              call: "zoom.create-meeting"
              with:
                topic: "Incident Bridge: {{create-incident.number}}"
                type: "instant"
  consumes:
    - type: http
      namespace: datadog
      baseUri: "https://api.datadoghq.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.datadog_api_key"
      resources:
        - name: alerts
          path: "/monitor/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-alert
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://hasbro.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: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - 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

Retrieves sprint status for a product development Jira project, returning completed stories, remaining work, and velocity.

naftiko: "0.5"
info:
  label: "Jira Product Development Tracker"
  description: "Retrieves sprint status for a product development Jira project, returning completed stories, remaining work, and velocity."
  tags:
    - product-development
    - jira
    - project-management
capability:
  exposes:
    - type: mcp
      namespace: product-dev
      port: 8080
      tools:
        - name: get-sprint-status
          description: "Get the active sprint status for a Jira project."
          inputParameters:
            - name: project_key
              in: body
              type: string
              description: "The Jira project key."
          call: "jira.get-sprint-summary"
          with:
            project_key: "{{project_key}}"
          outputParameters:
            - name: sprint_name
              type: string
              mapping: "$.active_sprint.name"
            - name: completed_stories
              type: integer
              mapping: "$.completed_count"
            - name: remaining_points
              type: integer
              mapping: "$.remaining_points"
  consumes:
    - type: http
      namespace: jira
      baseUri: "https://hasbro.atlassian.net/rest/api/3"
      authentication:
        type: basic
        username: "$secrets.jira_user"
        password: "$secrets.jira_api_token"
      resources:
        - name: search
          path: "/search?jql=project={{project_key}} AND sprint in openSprints()"
          inputParameters:
            - name: project_key
              in: path
          operations:
            - name: get-sprint-summary
              method: GET

Retrieves licensing agreement details from Salesforce, checks royalty payment status in SAP, and creates a Jira task for renewals approaching expiry.

naftiko: "0.5"
info:
  label: "Licensing Agreement Tracker"
  description: "Retrieves licensing agreement details from Salesforce, checks royalty payment status in SAP, and creates a Jira task for renewals approaching expiry."
  tags:
    - licensing
    - legal
    - salesforce
    - sap
    - jira
capability:
  exposes:
    - type: mcp
      namespace: licensing-management
      port: 8080
      tools:
        - name: check-license-status
          description: "Check licensing agreement status and flag upcoming renewals."
          inputParameters:
            - name: license_id
              in: body
              type: string
              description: "The Salesforce licensing agreement ID."
          steps:
            - name: get-agreement
              type: call
              call: "salesforce.get-license"
              with:
                license_id: "{{license_id}}"
            - name: get-royalties
              type: call
              call: "sap.get-royalty-status"
              with:
                agreement_ref: "{{get-agreement.Agreement_Ref__c}}"
            - name: create-renewal-task
              type: call
              call: "jira.create-issue"
              with:
                project_key: "LIC"
                summary: "License renewal: {{get-agreement.Name}} - expires {{get-agreement.Expiry_Date__c}}"
                issue_type: "Task"
                description: "Licensee: {{get-agreement.Licensee__c}}. Royalty YTD: {{get-royalties.ytd_amount}} {{get-royalties.currency}}. Expiry: {{get-agreement.Expiry_Date__c}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hasbro.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: licenses
          path: "/sobjects/License_Agreement__c/{{license_id}}"
          inputParameters:
            - name: license_id
              in: path
          operations:
            - name: get-license
              method: GET
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZLI_ROYALTY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: royalties
          path: "/RoyaltyStatusSet('{{agreement_ref}}')"
          inputParameters:
            - name: agreement_ref
              in: path
          operations:
            - name: get-royalty-status
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://hasbro.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

Publishes a branded content post to the Hasbro LinkedIn company page.

naftiko: "0.5"
info:
  label: "LinkedIn Brand Post Publisher"
  description: "Publishes a branded content post to the Hasbro LinkedIn company page."
  tags:
    - marketing
    - social-media
    - linkedin
capability:
  exposes:
    - type: mcp
      namespace: linkedin-publishing
      port: 8080
      tools:
        - name: publish-linkedin-post
          description: "Publish a post to the Hasbro LinkedIn company page."
          inputParameters:
            - name: post_text
              in: body
              type: string
              description: "The post content text."
          call: "linkedin.create-post"
          with:
            author: "urn:li:organization:hasbro"
            text: "{{post_text}}"
  consumes:
    - type: http
      namespace: linkedin
      baseUri: "https://api.linkedin.com/v2"
      authentication:
        type: bearer
        token: "$secrets.linkedin_token"
      resources:
        - name: posts
          path: "/ugcPosts"
          operations:
            - name: create-post
              method: POST

Pulls new product data from SAP, creates a MailChimp email campaign, and sends to the subscriber list.

naftiko: "0.5"
info:
  label: "MailChimp Product Newsletter"
  description: "Pulls new product data from SAP, creates a MailChimp email campaign, and sends to the subscriber list."
  tags:
    - marketing
    - newsletter
    - mailchimp
    - sap
capability:
  exposes:
    - type: mcp
      namespace: product-newsletter
      port: 8080
      tools:
        - name: send-product-newsletter
          description: "Create and send a product newsletter via MailChimp."
          inputParameters:
            - name: list_id
              in: body
              type: string
              description: "The MailChimp audience list ID."
            - name: product_category
              in: body
              type: string
              description: "The product category to feature."
          steps:
            - name: get-new-products
              type: call
              call: "sap.get-new-products"
              with:
                category: "{{product_category}}"
            - name: create-campaign
              type: call
              call: "mailchimp.create-campaign"
              with:
                list_id: "{{list_id}}"
                subject: "New from Hasbro: {{product_category}}"
                body: "Check out {{get-new-products.count}} new products in {{product_category}}! Featured: {{get-new-products.featured_name}} - {{get-new-products.featured_description}}."
            - name: send-campaign
              type: call
              call: "mailchimp.send-campaign"
              with:
                campaign_id: "{{create-campaign.id}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_PRODUCT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: new-products
          path: "/NewProductSet?$filter=Category eq '{{category}}'"
          inputParameters:
            - name: category
              in: query
          operations:
            - name: get-new-products
              method: GET
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: basic
        username: "anystring"
        password: "$secrets.mailchimp_api_key"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: create-campaign
              method: POST
        - name: campaign-actions
          path: "/campaigns/{{campaign_id}}/actions/send"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: send-campaign
              method: POST

Validates production batch in SAP quality module, updates batch status, creates inspection report in Confluence, and alerts quality team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Manufacturing Quality Gate Pipeline"
  description: "Validates production batch in SAP quality module, updates batch status, creates inspection report in Confluence, and alerts quality team via Microsoft Teams."
  tags:
    - manufacturing
    - sap
    - confluence
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: quality-gate
      port: 8080
      tools:
        - name: process-quality-gate
          description: "Orchestrate manufacturing quality gate across SAP, Confluence, and Teams."
          inputParameters:
            - name: batch_id
              in: body
              type: string
              description: "The production batch ID."
            - name: result
              in: body
              type: string
              description: "Pass or fail."
          steps:
            - name: validate-batch
              type: call
              call: "sap.get-batch-results"
              with:
                batch: "{{batch_id}}"
            - name: update-status
              type: call
              call: "sap.update-batch-status"
              with:
                batch: "{{batch_id}}"
                status: "{{result}}"
            - name: create-report
              type: call
              call: "confluence.create-page"
              with:
                space_key: "QUALITY"
                title: "Inspection Report: Batch {{batch_id}}"
                body: "Result: {{result}}. Details: {{validate-batch.details}}"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "quality-control"
                text: "Quality gate {{result}} for batch {{batch_id}}. Report: {{create-report.url}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZQUALITY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: batches
          path: "/BatchSet('{{batch}}')"
          inputParameters:
            - name: batch
              in: path
          operations:
            - name: get-batch-results
              method: GET
            - name: update-batch-status
              method: PATCH
    - type: http
      namespace: confluence
      baseUri: "https://hasbro.atlassian.net/wiki/api/v2"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Pulls campaign performance data from Adobe Analytics, enriches with Salesforce campaign details, and publishes a summary to Confluence.

naftiko: "0.5"
info:
  label: "Marketing Campaign Performance Analyzer"
  description: "Pulls campaign performance data from Adobe Analytics, enriches with Salesforce campaign details, and publishes a summary to Confluence."
  tags:
    - marketing
    - analytics
    - adobe-analytics
    - salesforce
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: campaign-analytics
      port: 8080
      tools:
        - name: analyze-campaign
          description: "Analyze a marketing campaign by combining Adobe Analytics and Salesforce data."
          inputParameters:
            - name: campaign_id
              in: body
              type: string
              description: "The Salesforce campaign ID."
            - name: report_suite_id
              in: body
              type: string
              description: "The Adobe Analytics report suite ID."
          steps:
            - name: get-sf-campaign
              type: call
              call: "salesforce.get-campaign"
              with:
                campaign_id: "{{campaign_id}}"
            - name: get-analytics
              type: call
              call: "adobe-analytics.get-report"
              with:
                rsid: "{{report_suite_id}}"
                campaign_code: "{{get-sf-campaign.Campaign_Code__c}}"
            - name: publish-report
              type: call
              call: "confluence.create-page"
              with:
                space_key: "MKT"
                title: "Campaign Report: {{get-sf-campaign.Name}}"
                body: "Impressions: {{get-analytics.impressions}}. Clicks: {{get-analytics.clicks}}. Conversions: {{get-analytics.conversions}}. ROI: {{get-analytics.roi}}. SF Leads: {{get-sf-campaign.NumberOfLeads}}."
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hasbro.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: campaigns
          path: "/sobjects/Campaign/{{campaign_id}}"
          inputParameters:
            - name: campaign_id
              in: path
          operations:
            - name: get-campaign
              method: GET
    - type: http
      namespace: adobe-analytics
      baseUri: "https://analytics.adobe.io/api"
      authentication:
        type: bearer
        token: "$secrets.adobe_analytics_token"
      resources:
        - name: reports
          path: "/{{rsid}}/reports"
          inputParameters:
            - name: rsid
              in: path
          operations:
            - name: get-report
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://hasbro.atlassian.net/wiki/api/v2"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST

Creates a media buy request in Salesforce, routes for budget approval via Jira, submits to Facebook Ads Manager, and tracks spend in Google Sheets.

naftiko: "0.5"
info:
  label: "Media Buy Approval Pipeline"
  description: "Creates a media buy request in Salesforce, routes for budget approval via Jira, submits to Facebook Ads Manager, and tracks spend in Google Sheets."
  tags:
    - advertising
    - salesforce
    - jira
    - facebook
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: media-buy
      port: 8080
      tools:
        - name: approve-media-buy
          description: "Orchestrate media buy approval across Salesforce, Jira, Facebook, and Google Sheets."
          inputParameters:
            - name: campaign_name
              in: body
              type: string
              description: "The campaign name."
            - name: budget
              in: body
              type: string
              description: "The media buy budget."
          steps:
            - name: create-request
              type: call
              call: "salesforce.create-opportunity"
              with:
                name: "Media Buy: {{campaign_name}}"
                amount: "{{budget}}"
            - name: create-approval
              type: call
              call: "jira.create-issue"
              with:
                project: "MEDIA"
                summary: "Approve media buy: {{campaign_name}} - ${{budget}}"
                type: "Approval"
            - name: submit-ad
              type: call
              call: "facebook.create-ad-set"
              with:
                campaign: "{{campaign_name}}"
                budget: "{{budget}}"
            - name: track-spend
              type: call
              call: "gsheets.append-row"
              with:
                spreadsheet_id: "media-spend"
                values: "{{campaign_name}},{{budget}},Pending"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hasbro.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity"
          operations:
            - name: create-opportunity
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://hasbro.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: facebook
      baseUri: "https://graph.facebook.com/v18.0"
      authentication:
        type: bearer
        token: "$secrets.facebook_token"
      resources:
        - name: ad-sets
          path: "/act_hasbro/adsets"
          operations:
            - name: create-ad-set
              method: POST
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
      authentication:
        type: bearer
        token: "$secrets.google_token"
      resources:
        - name: values
          path: "/{{spreadsheet_id}}/values/Sheet1:append?valueInputOption=RAW"
          inputParameters:
            - name: spreadsheet_id
              in: path
          operations:
            - name: append-row
              method: POST

Sends a formatted email via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Microsoft Outlook Email Sender"
  description: "Sends a formatted email via Microsoft Outlook."
  tags:
    - communications
    - email
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: email-sending
      port: 8080
      tools:
        - name: send-email
          description: "Send an email via Microsoft Outlook."
          inputParameters:
            - name: to_address
              in: body
              type: string
              description: "Recipient email."
            - name: subject
              in: body
              type: string
              description: "Email subject."
            - name: body_text
              in: body
              type: string
              description: "Email body."
          call: "outlook.send-mail"
          with:
            to: "{{to_address}}"
            subject: "{{subject}}"
            body: "{{body_text}}"
  consumes:
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0/me"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/sendMail"
          operations:
            - name: send-mail
              method: POST

Sends a formatted message to a Microsoft Teams channel.

naftiko: "0.5"
info:
  label: "Microsoft Teams Channel Notifier"
  description: "Sends a formatted message to a Microsoft Teams channel."
  tags:
    - communications
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: team-notifications
      port: 8080
      tools:
        - name: send-channel-notification
          description: "Send a message to a Microsoft Teams channel."
          inputParameters:
            - name: channel_id
              in: body
              type: string
              description: "The Teams channel ID."
            - name: message_text
              in: body
              type: string
              description: "The message text."
          call: "msteams.send-channel-message"
          with:
            channel_id: "{{channel_id}}"
            text: "{{message_text}}"
  consumes:
    - type: http
      namespace: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-channel-message
              method: POST

On new hire from Workday, provisions Azure AD account, creates a ServiceNow equipment request, assigns Slack channels, and sends welcome email via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "New Hire IT Provisioning Pipeline"
  description: "On new hire from Workday, provisions Azure AD account, creates a ServiceNow equipment request, assigns Slack channels, and sends welcome email via Microsoft Outlook."
  tags:
    - it
    - workday
    - azure-active-directory
    - servicenow
    - slack
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: it-provisioning
      port: 8080
      tools:
        - name: provision-new-hire
          description: "Orchestrate IT provisioning for new hires across Workday, Azure AD, ServiceNow, Slack, and Outlook."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
            - name: department
              in: body
              type: string
              description: "The department name."
          steps:
            - name: get-employee
              type: call
              call: "workday.get-worker"
              with:
                id: "{{employee_id}}"
            - name: create-account
              type: call
              call: "azuread.create-user"
              with:
                display_name: "{{get-employee.name}}"
                department: "{{department}}"
                email: "{{get-employee.email}}"
            - name: request-equipment
              type: call
              call: "servicenow.create-request"
              with:
                type: "New Hire Equipment"
                description: "Equipment for {{get-employee.name}} - {{department}}"
            - name: add-to-slack
              type: call
              call: "slack.invite-user"
              with:
                email: "{{get-employee.email}}"
                channels: "general,{{department}}"
            - name: send-welcome
              type: call
              call: "outlook.send-email"
              with:
                to: "{{get-employee.email}}"
                subject: "Welcome to Hasbro IT"
                body: "Your accounts have been provisioned. Equipment request: {{request-equipment.number}}"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/service/hasbro"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: workers
          path: "/Human_Resources/Workers/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-worker
              method: GET
    - type: http
      namespace: azuread
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: users
          path: "/users"
          operations:
            - name: create-user
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://hasbro.service-now.com/api/now"
      authentication:
        type: bearer
        token: "$secrets.servicenow_token"
      resources:
        - name: requests
          path: "/table/sc_request"
          operations:
            - name: create-request
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: invitations
          path: "/conversations.invite"
          operations:
            - name: invite-user
              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

On product launch, creates a Salesforce campaign, publishes product assets to SharePoint, sends launch announcement to Microsoft Teams, and posts to social media via HubSpot.

naftiko: "0.5"
info:
  label: "New Product Launch Orchestrator"
  description: "On product launch, creates a Salesforce campaign, publishes product assets to SharePoint, sends launch announcement to Microsoft Teams, and posts to social media via HubSpot."
  tags:
    - product
    - launch
    - salesforce
    - sharepoint
    - microsoft-teams
    - hubspot
capability:
  exposes:
    - type: mcp
      namespace: product-launch
      port: 8080
      tools:
        - name: launch-product
          description: "Orchestrate a new product launch across Salesforce, SharePoint, Teams, and HubSpot."
          inputParameters:
            - name: product_sku
              in: body
              type: string
              description: "The product SKU."
            - name: launch_date
              in: body
              type: string
              description: "The launch date in YYYY-MM-DD format."
            - name: product_name
              in: body
              type: string
              description: "The product display name."
          steps:
            - name: create-campaign
              type: call
              call: "salesforce.create-campaign"
              with:
                name: "Launch: {{product_name}}"
                start_date: "{{launch_date}}"
                type: "Product Launch"
                status: "Planned"
            - name: upload-assets
              type: call
              call: "sharepoint.create-folder"
              with:
                site_id: "marketing_site"
                folder_path: "ProductLaunches/{{product_sku}}_{{product_name}}"
            - name: announce-teams
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "product-launches"
                text: "New product launch: {{product_name}} ({{product_sku}}) on {{launch_date}}. Campaign: {{create-campaign.Id}}. Assets: {{upload-assets.url}}."
            - name: schedule-social
              type: call
              call: "hubspot.create-social-post"
              with:
                content: "Exciting news! {{product_name}} is coming {{launch_date}}! #Hasbro #Toys #NewRelease"
                campaign_id: "{{create-campaign.Id}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hasbro.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: campaigns
          path: "/sobjects/Campaign"
          operations:
            - name: create-campaign
              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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: social-posts
          path: "/broadcast/v1/broadcasts"
          operations:
            - name: create-social-post
              method: POST

Retrieves application performance metrics from New Relic by application ID, returning response time, error rate, and throughput.

naftiko: "0.5"
info:
  label: "New Relic Application Performance Lookup"
  description: "Retrieves application performance metrics from New Relic by application ID, returning response time, error rate, and throughput."
  tags:
    - monitoring
    - new-relic
capability:
  exposes:
    - type: mcp
      namespace: newrelic-apm
      port: 8080
      tools:
        - name: get-app-performance
          description: "Look up application performance metrics in New Relic."
          inputParameters:
            - name: app_id
              in: body
              type: string
              description: "The New Relic application ID."
          call: "newrelic.get-app"
          with:
            id: "{{app_id}}"
          outputParameters:
            - name: response_time
              type: string
              mapping: "$.application.application_summary.response_time"
            - name: error_rate
              type: string
              mapping: "$.application.application_summary.error_rate"
  consumes:
    - type: http
      namespace: newrelic
      baseUri: "https://api.newrelic.com/v2"
      authentication:
        type: bearer
        token: "$secrets.newrelic_api_key"
      resources:
        - name: applications
          path: "/applications/{{id}}.json"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-app
              method: GET

Creates a patent case in Salesforce, generates filing documents in SharePoint, assigns legal review via Jira, and notifies the IP team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Patent Filing Coordination Pipeline"
  description: "Creates a patent case in Salesforce, generates filing documents in SharePoint, assigns legal review via Jira, and notifies the IP team via Microsoft Teams."
  tags:
    - legal
    - salesforce
    - sharepoint
    - jira
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: patent-filing
      port: 8080
      tools:
        - name: coordinate-patent-filing
          description: "Orchestrate patent filing coordination across Salesforce, SharePoint, Jira, and Teams."
          inputParameters:
            - name: invention_title
              in: body
              type: string
              description: "The invention title."
            - name: inventor_name
              in: body
              type: string
              description: "The inventor name."
          steps:
            - name: create-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "Patent Filing: {{invention_title}}"
                inventor: "{{inventor_name}}"
            - name: create-documents
              type: call
              call: "sharepoint.create-folder"
              with:
                site: "legal"
                path: "Patents/{{invention_title}}"
            - name: assign-review
              type: call
              call: "jira.create-issue"
              with:
                project: "IP"
                summary: "Patent Review: {{invention_title}}"
                description: "Inventor: {{inventor_name}}"
            - name: notify-ip-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "ip-legal"
                text: "New patent filing: {{invention_title}} by {{inventor_name}}. Case: {{create-case.Id}}. Jira: {{assign-review.key}}"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hasbro.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: folders
          path: "/{{site}}/drive/root:/{{path}}"
          inputParameters:
            - name: site
              in: path
            - name: path
              in: path
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: jira
      baseUri: "https://hasbro.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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Pulls sales data from SAP and pushes to a Power BI dataset for real-time dashboard visibility.

naftiko: "0.5"
info:
  label: "Power BI Sales Dashboard Sync"
  description: "Pulls sales data from SAP and pushes to a Power BI dataset for real-time dashboard visibility."
  tags:
    - analytics
    - power-bi
    - sap
    - reporting
capability:
  exposes:
    - type: mcp
      namespace: sales-dashboard
      port: 8080
      tools:
        - name: sync-sales-data
          description: "Pull SAP sales data and push to Power BI."
          inputParameters:
            - name: period
              in: body
              type: string
              description: "The sales period to sync."
          steps:
            - name: get-sales
              type: call
              call: "sap.get-sales-summary"
              with:
                period: "{{period}}"
            - name: push-to-bi
              type: call
              call: "powerbi.push-rows"
              with:
                dataset_id: "sales_dashboard_ds"
                table_name: "Sales"
                rows:
                  - period: "{{period}}"
                    total_revenue: "{{get-sales.total_revenue}}"
                    units_sold: "{{get-sales.units_sold}}"
                    top_product: "{{get-sales.top_product}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZSD_SALES_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: sales
          path: "/SalesSummarySet('{{period}}')"
          inputParameters:
            - name: period
              in: path
          operations:
            - name: get-sales-summary
              method: GET
    - 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}}/tables/{{table_name}}/rows"
          inputParameters:
            - name: dataset_id
              in: path
            - name: table_name
              in: path
          operations:
            - name: push-rows
              method: POST

Retrieves a product from the SAP product catalog by SKU, returning product name, category, MSRP, availability status, and age rating.

naftiko: "0.5"
info:
  label: "Product Catalog Lookup"
  description: "Retrieves a product from the SAP product catalog by SKU, returning product name, category, MSRP, availability status, and age rating."
  tags:
    - product
    - catalog
    - sap
capability:
  exposes:
    - type: mcp
      namespace: product-catalog
      port: 8080
      tools:
        - name: get-product
          description: "Look up a Hasbro product by SKU from SAP."
          inputParameters:
            - name: product_sku
              in: body
              type: string
              description: "The product SKU code."
          call: "sap.get-product"
          with:
            sku: "{{product_sku}}"
          outputParameters:
            - name: product_name
              type: string
              mapping: "$.d.ProductName"
            - name: category
              type: string
              mapping: "$.d.Category"
            - name: msrp
              type: string
              mapping: "$.d.MSRP"
            - name: availability
              type: string
              mapping: "$.d.AvailabilityStatus"
            - name: age_rating
              type: string
              mapping: "$.d.AgeRating"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_PRODUCT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: products
          path: "/ProductSet('{{sku}}')"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: get-product
              method: GET

Retrieves test results from SAP quality module, generates certification documents in SharePoint, updates compliance tracker in Airtable, and notifies the legal team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Product Compliance Certification Pipeline"
  description: "Retrieves test results from SAP quality module, generates certification documents in SharePoint, updates compliance tracker in Airtable, and notifies the legal team via Microsoft Teams."
  tags:
    - compliance
    - sap
    - sharepoint
    - airtable
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: compliance-cert
      port: 8080
      tools:
        - name: certify-product
          description: "Orchestrate product compliance certification across SAP, SharePoint, Airtable, and Teams."
          inputParameters:
            - name: product_sku
              in: body
              type: string
              description: "The product SKU."
            - name: market
              in: body
              type: string
              description: "The target market."
          steps:
            - name: get-test-results
              type: call
              call: "sap.get-quality-results"
              with:
                sku: "{{product_sku}}"
            - name: generate-cert
              type: call
              call: "sharepoint.create-document"
              with:
                site: "compliance"
                path: "Certifications/{{product_sku}}/{{market}}"
                template: "compliance_certificate"
            - name: update-tracker
              type: call
              call: "airtable.create-record"
              with:
                table: "ComplianceTracker"
                sku: "{{product_sku}}"
                market: "{{market}}"
                status: "Certified"
            - name: notify-legal
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "legal-compliance"
                text: "Product {{product_sku}} certified for {{market}}. Certificate: {{generate-cert.webUrl}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZQUALITY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: quality
          path: "/QualityResultSet('{{sku}}')"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: get-quality-results
              method: GET
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: documents
          path: "/{{site}}/drive/root:/{{path}}"
          inputParameters:
            - name: site
              in: path
            - name: path
              in: path
          operations:
            - name: create-document
              method: PUT
    - type: http
      namespace: airtable
      baseUri: "https://api.airtable.com/v0/appHasbro"
      authentication:
        type: bearer
        token: "$secrets.airtable_token"
      resources:
        - name: records
          path: "/ComplianceTracker"
          operations:
            - name: create-record
              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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Marks product as discontinued in SAP, removes from BigCommerce storefront, archives assets in Box, and notifies retail partners via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Product Discontinuation Pipeline"
  description: "Marks product as discontinued in SAP, removes from BigCommerce storefront, archives assets in Box, and notifies retail partners via Microsoft Outlook."
  tags:
    - product
    - sap
    - bigcommerce
    - box
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: product-discontinuation
      port: 8080
      tools:
        - name: discontinue-product
          description: "Orchestrate product discontinuation across SAP, BigCommerce, Box, and Outlook."
          inputParameters:
            - name: product_sku
              in: body
              type: string
              description: "The product SKU."
            - name: effective_date
              in: body
              type: string
              description: "The discontinuation date."
          steps:
            - name: update-sap
              type: call
              call: "sap.update-product"
              with:
                sku: "{{product_sku}}"
                status: "DISCONTINUED"
                date: "{{effective_date}}"
            - name: remove-listing
              type: call
              call: "bigcommerce.update-product"
              with:
                sku: "{{product_sku}}"
                is_visible: "false"
            - name: archive-assets
              type: call
              call: "box.move-folder"
              with:
                source: "products/{{product_sku}}"
                destination: "archived-products/{{product_sku}}"
            - name: notify-partners
              type: call
              call: "outlook.send-email"
              with:
                to: "retail-partners@hasbro.com"
                subject: "Product Discontinuation: {{product_sku}}"
                body: "Product {{product_sku}} will be discontinued effective {{effective_date}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_PRODUCT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: products
          path: "/ProductSet('{{sku}}')"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: update-product
              method: PATCH
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/hasbro/v3"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      resources:
        - name: products
          path: "/catalog/products"
          operations:
            - name: update-product
              method: PUT
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: folders
          path: "/folders/{{source}}"
          inputParameters:
            - name: source
              in: path
          operations:
            - name: move-folder
              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

Fetches packaging design from Figma, routes for approval via Asana, archives approved assets in Box, and updates product metadata in SAP.

naftiko: "0.5"
info:
  label: "Product Packaging Review Pipeline"
  description: "Fetches packaging design from Figma, routes for approval via Asana, archives approved assets in Box, and updates product metadata in SAP."
  tags:
    - packaging
    - figma
    - asana
    - box
    - sap
capability:
  exposes:
    - type: mcp
      namespace: packaging-review
      port: 8080
      tools:
        - name: review-packaging
          description: "Orchestrate packaging design review across Figma, Asana, Box, and SAP."
          inputParameters:
            - name: design_key
              in: body
              type: string
              description: "The Figma design file key."
            - name: product_sku
              in: body
              type: string
              description: "The product SKU."
          steps:
            - name: get-design
              type: call
              call: "figma.get-file"
              with:
                key: "{{design_key}}"
            - name: create-review-task
              type: call
              call: "asana.create-task"
              with:
                name: "Packaging Review: {{product_sku}}"
                notes: "Review design: {{get-design.thumbnailUrl}}"
                project: "packaging-reviews"
            - name: archive-design
              type: call
              call: "box.upload-file"
              with:
                folder_id: "packaging-assets"
                file_name: "{{product_sku}}_packaging.fig"
            - name: update-product
              type: call
              call: "sap.update-product"
              with:
                sku: "{{product_sku}}"
                packaging_status: "Under Review"
  consumes:
    - type: http
      namespace: figma
      baseUri: "https://api.figma.com/v1"
      authentication:
        type: bearer
        token: "$secrets.figma_token"
      resources:
        - name: files
          path: "/files/{{key}}"
          inputParameters:
            - name: key
              in: path
          operations:
            - name: get-file
              method: GET
    - type: http
      namespace: asana
      baseUri: "https://app.asana.com/api/1.0"
      authentication:
        type: bearer
        token: "$secrets.asana_token"
      resources:
        - name: tasks
          path: "/tasks"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: box
      baseUri: "https://upload.box.com/api/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: files
          path: "/files/content"
          operations:
            - name: upload-file
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_PRODUCT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: products
          path: "/ProductSet('{{sku}}')"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: update-product
              method: PATCH

Retrieves product details from SAP, creates a photography task in Asana, uploads assets to Google Drive, and publishes to the BigCommerce product page.

naftiko: "0.5"
info:
  label: "Product Photography Workflow"
  description: "Retrieves product details from SAP, creates a photography task in Asana, uploads assets to Google Drive, and publishes to the BigCommerce product page."
  tags:
    - creative
    - sap
    - asana
    - google-drive
    - bigcommerce
capability:
  exposes:
    - type: mcp
      namespace: product-photography
      port: 8080
      tools:
        - name: manage-photography
          description: "Orchestrate product photography workflow across SAP, Asana, Google Drive, and BigCommerce."
          inputParameters:
            - name: product_sku
              in: body
              type: string
              description: "The product SKU."
          steps:
            - name: get-product
              type: call
              call: "sap.get-product"
              with:
                sku: "{{product_sku}}"
            - name: create-task
              type: call
              call: "asana.create-task"
              with:
                name: "Photography: {{get-product.ProductName}}"
                project: "product-photography"
            - name: create-folder
              type: call
              call: "gdrive.create-folder"
              with:
                name: "{{product_sku}}_photos"
                parent: "product-assets"
            - name: update-listing
              type: call
              call: "bigcommerce.update-product-images"
              with:
                sku: "{{product_sku}}"
                folder_url: "{{create-folder.webViewLink}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_PRODUCT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: products
          path: "/ProductSet('{{sku}}')"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: get-product
              method: GET
    - type: http
      namespace: asana
      baseUri: "https://app.asana.com/api/1.0"
      authentication:
        type: bearer
        token: "$secrets.asana_token"
      resources:
        - name: tasks
          path: "/tasks"
          operations:
            - name: create-task
              method: POST
    - type: http
      namespace: gdrive
      baseUri: "https://www.googleapis.com/drive/v3"
      authentication:
        type: bearer
        token: "$secrets.google_token"
      resources:
        - name: files
          path: "/files"
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/hasbro/v3"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      resources:
        - name: products
          path: "/catalog/products"
          operations:
            - name: update-product-images
              method: PUT

Initiates a product recall by flagging in SAP, creating a Salesforce case for affected retailers, opening a ServiceNow incident, sending recall notices via Microsoft Outlook, and alerting all teams in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Product Recall Coordinator"
  description: "Initiates a product recall by flagging in SAP, creating a Salesforce case for affected retailers, opening a ServiceNow incident, sending recall notices via Microsoft Outlook, and alerting all teams in Microsoft Teams."
  tags:
    - compliance
    - recall
    - sap
    - salesforce
    - servicenow
    - microsoft-outlook
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: product-recall
      port: 8080
      tools:
        - name: initiate-recall
          description: "Coordinate a product recall across all systems."
          inputParameters:
            - name: product_sku
              in: body
              type: string
              description: "The product SKU to recall."
            - name: reason
              in: body
              type: string
              description: "The recall reason."
          steps:
            - name: flag-product
              type: call
              call: "sap.flag-recall"
              with:
                sku: "{{product_sku}}"
                reason: "{{reason}}"
            - name: create-sf-case
              type: call
              call: "salesforce.create-case"
              with:
                subject: "RECALL: {{flag-product.ProductName}} ({{product_sku}})"
                description: "Product recall initiated. Reason: {{reason}}. Affected units: {{flag-product.units_in_field}}."
                priority: "Critical"
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Product recall: {{product_sku}}"
                priority: "1"
                description: "Recall for {{flag-product.ProductName}}. Reason: {{reason}}. SF Case: {{create-sf-case.CaseNumber}}."
            - name: send-notices
              type: call
              call: "outlook.send-email"
              with:
                to: "retailers-list@hasbro.com"
                subject: "URGENT: Product Recall - {{flag-product.ProductName}}"
                body: "Hasbro is issuing a recall for {{flag-product.ProductName}} (SKU: {{product_sku}}). Reason: {{reason}}. Please remove from shelves immediately."
            - name: alert-all
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "company-wide-alerts"
                text: "PRODUCT RECALL: {{flag-product.ProductName}} ({{product_sku}}). Reason: {{reason}}. SF Case: {{create-sf-case.CaseNumber}}. ServiceNow: {{create-incident.number}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_RECALL_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: recalls
          path: "/RecallSet"
          operations:
            - name: flag-recall
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://hasbro.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: cases
          path: "/sobjects/Case"
          operations:
            - name: create-case
              method: POST
    - type: http
      namespace: servicenow
      baseUri: "https://hasbro.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: outlook
      baseUri: "https://graph.microsoft.com/v1.0/me"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Aggregates royalty data from Snowflake, generates a formatted report in Google Sheets, uploads to SharePoint, and distributes to licensees via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Quarterly Royalty Reporting Pipeline"
  description: "Aggregates royalty data from Snowflake, generates a formatted report in Google Sheets, uploads to SharePoint, and distributes to licensees via Microsoft Outlook."
  tags:
    - finance
    - snowflake
    - google-sheets
    - sharepoint
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: royalty-reporting
      port: 8080
      tools:
        - name: generate-royalty-report
          description: "Orchestrate quarterly royalty reporting across Snowflake, Google Sheets, SharePoint, and Outlook."
          inputParameters:
            - name: quarter
              in: body
              type: string
              description: "The reporting quarter (e.g., Q1-2026)."
            - name: licensee_id
              in: body
              type: string
              description: "The licensee partner ID."
          steps:
            - name: query-royalties
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT * FROM ROYALTIES WHERE quarter='{{quarter}}' AND licensee='{{licensee_id}}'"
            - name: create-report
              type: call
              call: "gsheets.create-spreadsheet"
              with:
                title: "Royalty Report - {{licensee_id}} - {{quarter}}"
                data: "{{query-royalties.data}}"
            - name: archive-report
              type: call
              call: "sharepoint.upload-file"
              with:
                site: "finance"
                path: "Royalties/{{quarter}}/{{licensee_id}}"
                file_url: "{{create-report.spreadsheetUrl}}"
            - name: send-report
              type: call
              call: "outlook.send-email"
              with:
                to: "{{licensee_id}}@partners.hasbro.com"
                subject: "{{quarter}} Royalty Report"
                body: "Your quarterly royalty report is ready: {{create-report.spreadsheetUrl}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://hasbro.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets"
          operations:
            - name: create-spreadsheet
              method: POST
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site}}/drive/root:/{{path}}"
          inputParameters:
            - name: site
              in: path
            - name: path
              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

Retrieves real-time inventory levels from SAP for a product SKU at a specified distribution center, returning quantity on hand, reserved, and available.

naftiko: "0.5"
info:
  label: "Retail Inventory Check"
  description: "Retrieves real-time inventory levels from SAP for a product SKU at a specified distribution center, returning quantity on hand, reserved, and available."
  tags:
    - retail
    - inventory
    - sap
capability:
  exposes:
    - type: mcp
      namespace: inventory-management
      port: 8080
      tools:
        - name: check-inventory
          description: "Check inventory levels for a product at a distribution center."
          inputParameters:
            - name: product_sku
              in: body
              type: string
              description: "The product SKU."
            - name: warehouse_code
              in: body
              type: string
              description: "The distribution center code."
          call: "sap.get-inventory"
          with:
            sku: "{{product_sku}}"
            warehouse: "{{warehouse_code}}"
          outputParameters:
            - name: on_hand
              type: integer
              mapping: "$.d.QuantityOnHand"
            - name: reserved
              type: integer
              mapping: "$.d.QuantityReserved"
            - name: available
              type: integer
              mapping: "$.d.QuantityAvailable"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_INVENTORY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: inventory
          path: "/InventorySet(SKU='{{sku}}',Warehouse='{{warehouse}}')"
          inputParameters:
            - name: sku
              in: path
            - name: warehouse
              in: path
          operations:
            - name: get-inventory
              method: GET

On new retail order, validates inventory in SAP, creates a shipment in the logistics system, updates the BigCommerce order status, and sends confirmation via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Retail Order Fulfillment Orchestrator"
  description: "On new retail order, validates inventory in SAP, creates a shipment in the logistics system, updates the BigCommerce order status, and sends confirmation via Microsoft Outlook."
  tags:
    - fulfillment
    - sap
    - bigcommerce
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: order-fulfillment
      port: 8080
      tools:
        - name: fulfill-order
          description: "Orchestrate retail order fulfillment across SAP, BigCommerce, and Outlook."
          inputParameters:
            - name: order_id
              in: body
              type: string
              description: "The BigCommerce order ID."
            - name: retailer_email
              in: body
              type: string
              description: "The retailer contact email."
          steps:
            - name: check-inventory
              type: call
              call: "sap.check-inventory"
              with:
                order_id: "{{order_id}}"
            - name: create-shipment
              type: call
              call: "sap.create-shipment"
              with:
                order_id: "{{order_id}}"
                warehouse: "{{check-inventory.warehouse}}"
            - name: update-order-status
              type: call
              call: "bigcommerce.update-order"
              with:
                id: "{{order_id}}"
                status: "Shipped"
                tracking_number: "{{create-shipment.tracking_number}}"
            - name: send-confirmation
              type: call
              call: "outlook.send-email"
              with:
                to: "{{retailer_email}}"
                subject: "Order {{order_id}} Shipped"
                body: "Your order {{order_id}} has been shipped. Tracking: {{create-shipment.tracking_number}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZLOGISTICS_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: inventory
          path: "/InventoryCheck"
          operations:
            - name: check-inventory
              method: POST
        - name: shipments
          path: "/ShipmentSet"
          operations:
            - name: create-shipment
              method: POST
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/hasbro/v2"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      resources:
        - name: orders
          path: "/orders/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: update-order
              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

When a retail partner submits a large order via BigCommerce, validates inventory in SAP, creates a Salesforce opportunity, and notifies the sales team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Retail Partner Order Pipeline"
  description: "When a retail partner submits a large order via BigCommerce, validates inventory in SAP, creates a Salesforce opportunity, and notifies the sales team in Microsoft Teams."
  tags:
    - retail
    - e-commerce
    - bigcommerce
    - sap
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: retail-orders
      port: 8080
      tools:
        - name: process-retail-order
          description: "Process a large retail partner order from BigCommerce."
          inputParameters:
            - name: bigcommerce_order_id
              in: body
              type: string
              description: "The BigCommerce order ID."
          steps:
            - name: get-order
              type: call
              call: "bigcommerce.get-order"
              with:
                order_id: "{{bigcommerce_order_id}}"
            - name: check-inventory
              type: call
              call: "sap.get-inventory-batch"
              with:
                sku_list: "{{get-order.product_skus}}"
            - name: create-opportunity
              type: call
              call: "salesforce.create-opportunity"
              with:
                name: "Retail Order: {{get-order.customer_name}} - {{get-order.total}}"
                amount: "{{get-order.total}}"
                stage: "Proposal"
            - name: notify-sales
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "retail-sales"
                text: "New retail order from {{get-order.customer_name}}: ${{get-order.total}}. Items: {{get-order.item_count}}. SF Opp: {{create-opportunity.Id}}."
  consumes:
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/hasbro/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: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_INVENTORY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: inventory-batch
          path: "/InventoryBatchCheck"
          operations:
            - name: get-inventory-batch
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://hasbro.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity"
          operations:
            - name: create-opportunity
              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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves sales velocity data from SAP BW, analyzes shelf performance from Circana, and generates a planogram recommendation report in Confluence.

naftiko: "0.5"
info:
  label: "Retail Planogram Optimizer"
  description: "Retrieves sales velocity data from SAP BW, analyzes shelf performance from Circana, and generates a planogram recommendation report in Confluence."
  tags:
    - retail
    - merchandising
    - sap-bw
    - circana
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: planogram-optimization
      port: 8080
      tools:
        - name: optimize-planogram
          description: "Generate a planogram optimization report based on sales and market data."
          inputParameters:
            - name: category
              in: body
              type: string
              description: "The retail category."
            - name: retailer_id
              in: body
              type: string
              description: "The retailer account ID."
          steps:
            - name: get-sales-velocity
              type: call
              call: "sapbw.get-velocity"
              with:
                category: "{{category}}"
                retailer: "{{retailer_id}}"
            - name: get-market-data
              type: call
              call: "circana.get-category-data"
              with:
                category: "{{category}}"
            - name: publish-report
              type: call
              call: "confluence.create-page"
              with:
                space_key: "RETAIL"
                title: "Planogram Recommendation: {{category}} - {{retailer_id}}"
                body: "Top sellers: {{get-sales-velocity.top_products}}. Market share: {{get-market-data.market_share}}. Recommended facing: {{get-sales-velocity.recommended_facing}}."
  consumes:
    - type: http
      namespace: sapbw
      baseUri: "https://hasbro-bw.sap.com/sap/opu/odata/sap/ZSD_VELOCITY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_bw_user"
        password: "$secrets.sap_bw_password"
      resources:
        - name: velocity
          path: "/VelocitySet(Category='{{category}}',Retailer='{{retailer}}')"
          inputParameters:
            - name: category
              in: path
            - name: retailer
              in: path
          operations:
            - name: get-velocity
              method: GET
    - type: http
      namespace: circana
      baseUri: "https://api.circana.com/v1"
      authentication:
        type: bearer
        token: "$secrets.circana_token"
      resources:
        - name: categories
          path: "/categories/{{category}}/performance"
          inputParameters:
            - name: category
              in: path
          operations:
            - name: get-category-data
              method: GET
    - type: http
      namespace: confluence
      baseUri: "https://hasbro.atlassian.net/wiki/api/v2"
      authentication:
        type: basic
        username: "$secrets.confluence_user"
        password: "$secrets.confluence_api_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST

Creates a promotion in SAP, publishes to BigCommerce storefront, sends retailer notifications via MailChimp, and tracks in Google Sheets.

naftiko: "0.5"
info:
  label: "Retail Promotion Activation Pipeline"
  description: "Creates a promotion in SAP, publishes to BigCommerce storefront, sends retailer notifications via MailChimp, and tracks in Google Sheets."
  tags:
    - promotions
    - sap
    - bigcommerce
    - mailchimp
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: promotion-activation
      port: 8080
      tools:
        - name: activate-promotion
          description: "Orchestrate retail promotion activation across SAP, BigCommerce, MailChimp, and Google Sheets."
          inputParameters:
            - name: promo_name
              in: body
              type: string
              description: "The promotion name."
            - name: discount_percent
              in: body
              type: string
              description: "The discount percentage."
            - name: start_date
              in: body
              type: string
              description: "The promotion start date."
          steps:
            - name: create-sap-promo
              type: call
              call: "sap.create-promotion"
              with:
                name: "{{promo_name}}"
                discount: "{{discount_percent}}"
                start: "{{start_date}}"
            - name: publish-storefront
              type: call
              call: "bigcommerce.create-coupon"
              with:
                name: "{{promo_name}}"
                discount: "{{discount_percent}}"
            - name: notify-retailers
              type: call
              call: "mailchimp.send-campaign"
              with:
                subject: "New Promotion: {{promo_name}} - {{discount_percent}}% off"
                list_id: "retail-partners"
            - name: track-promo
              type: call
              call: "gsheets.append-row"
              with:
                spreadsheet_id: "promotion-tracker"
                values: "{{promo_name}},{{discount_percent}},{{start_date}},Active"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPROMOTION_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: promotions
          path: "/PromotionSet"
          operations:
            - name: create-promotion
              method: POST
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/hasbro/v2"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      resources:
        - name: coupons
          path: "/coupons"
          operations:
            - name: create-coupon
              method: POST
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_token"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: send-campaign
              method: POST
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
      authentication:
        type: bearer
        token: "$secrets.google_token"
      resources:
        - name: values
          path: "/{{spreadsheet_id}}/values/Sheet1:append?valueInputOption=RAW"
          inputParameters:
            - name: spreadsheet_id
              in: path
          operations:
            - name: append-row
              method: POST

Collects shelf performance data from Circana, stores in Snowflake, updates Tableau dashboards, and sends insights to the sales team via Microsoft Teams.

naftiko: "0.5"
info:
  label: "Retail Shelf Analytics Pipeline"
  description: "Collects shelf performance data from Circana, stores in Snowflake, updates Tableau dashboards, and sends insights to the sales team via Microsoft Teams."
  tags:
    - retail
    - circana
    - snowflake
    - tableau
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: shelf-analytics
      port: 8080
      tools:
        - name: analyze-shelf-performance
          description: "Orchestrate retail shelf analytics across Circana, Snowflake, Tableau, and Teams."
          inputParameters:
            - name: retailer
              in: body
              type: string
              description: "The retailer name."
            - name: category
              in: body
              type: string
              description: "The product category."
          steps:
            - name: get-shelf-data
              type: call
              call: "circana.get-shelf-metrics"
              with:
                retailer: "{{retailer}}"
                category: "{{category}}"
            - name: store-data
              type: call
              call: "snowflake.insert-data"
              with:
                table: "SHELF_ANALYTICS"
                data: "{{get-shelf-data.results}}"
            - name: refresh-dashboard
              type: call
              call: "tableau.refresh-extract"
              with:
                datasource: "shelf-performance"
            - name: share-insights
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "retail-sales"
                text: "Shelf analytics for {{retailer}} ({{category}}): Share of shelf {{get-shelf-data.share_of_shelf}}%"
  consumes:
    - type: http
      namespace: circana
      baseUri: "https://api.circana.com/v1"
      authentication:
        type: bearer
        token: "$secrets.circana_token"
      resources:
        - name: shelf
          path: "/shelf-metrics"
          operations:
            - name: get-shelf-metrics
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://hasbro.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: insert-data
              method: POST
    - type: http
      namespace: tableau
      baseUri: "https://tableau.hasbro.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: datasources
          path: "/sites/hasbro/datasources/{{datasource}}/refresh"
          inputParameters:
            - name: datasource
              in: path
          operations:
            - name: refresh-extract
              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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a Salesforce opportunity by ID, returning deal stage, amount, close date, and account name.

naftiko: "0.5"
info:
  label: "Salesforce Opportunity Lookup"
  description: "Retrieves a Salesforce opportunity by ID, returning deal stage, amount, close date, and account name."
  tags:
    - sales
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: salesforce-opps
      port: 8080
      tools:
        - name: get-opportunity
          description: "Look up a Salesforce opportunity by ID."
          inputParameters:
            - name: opportunity_id
              in: body
              type: string
              description: "The Salesforce opportunity ID."
          call: "salesforce.get-opportunity"
          with:
            id: "{{opportunity_id}}"
          outputParameters:
            - name: stage
              type: string
              mapping: "$.StageName"
            - name: amount
              type: string
              mapping: "$.Amount"
            - name: close_date
              type: string
              mapping: "$.CloseDate"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hasbro.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: opportunities
          path: "/sobjects/Opportunity/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-opportunity
              method: GET

Retrieves a retail partner account from Salesforce by account ID, returning company name, tier, annual revenue, and primary contact.

naftiko: "0.5"
info:
  label: "Salesforce Retail Account Lookup"
  description: "Retrieves a retail partner account from Salesforce by account ID, returning company name, tier, annual revenue, and primary contact."
  tags:
    - retail
    - crm
    - salesforce
capability:
  exposes:
    - type: mcp
      namespace: retail-accounts
      port: 8080
      tools:
        - name: get-retail-account
          description: "Look up a Salesforce retail partner account."
          inputParameters:
            - name: account_id
              in: body
              type: string
              description: "The Salesforce account ID."
          call: "salesforce.get-account"
          with:
            account_id: "{{account_id}}"
          outputParameters:
            - name: company_name
              type: string
              mapping: "$.Name"
            - name: tier
              type: string
              mapping: "$.Partner_Tier__c"
            - name: annual_revenue
              type: string
              mapping: "$.AnnualRevenue"
            - name: primary_contact
              type: string
              mapping: "$.Primary_Contact__c"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hasbro.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account/{{account_id}}"
          inputParameters:
            - name: account_id
              in: path
          operations:
            - name: get-account
              method: GET

Queries SAP BW for sales analytics by product line, returning revenue, units, and year-over-year growth.

naftiko: "0.5"
info:
  label: "SAP BW Sales Analytics"
  description: "Queries SAP BW for sales analytics by product line, returning revenue, units, and year-over-year growth."
  tags:
    - analytics
    - sap-bw
    - sales
capability:
  exposes:
    - type: mcp
      namespace: sales-analytics
      port: 8080
      tools:
        - name: get-sales-analytics
          description: "Get sales analytics from SAP BW by product line."
          inputParameters:
            - name: product_line
              in: body
              type: string
              description: "The product line name."
            - name: period
              in: body
              type: string
              description: "The reporting period."
          call: "sapbw.get-sales"
          with:
            product_line: "{{product_line}}"
            period: "{{period}}"
          outputParameters:
            - name: revenue
              type: string
              mapping: "$.d.Revenue"
            - name: units_sold
              type: integer
              mapping: "$.d.UnitsSold"
            - name: yoy_growth
              type: string
              mapping: "$.d.YoYGrowth"
  consumes:
    - type: http
      namespace: sapbw
      baseUri: "https://hasbro-bw.sap.com/sap/opu/odata/sap/ZSD_SALES_BW_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_bw_user"
        password: "$secrets.sap_bw_password"
      resources:
        - name: sales
          path: "/SalesAnalyticsSet(ProductLine='{{product_line}}',Period='{{period}}')"
          inputParameters:
            - name: product_line
              in: path
            - name: period
              in: path
          operations:
            - name: get-sales
              method: GET

Retrieves a travel expense report from SAP Concur, validates against budget, and creates a Jira approval task.

naftiko: "0.5"
info:
  label: "SAP Concur Travel Expense Report"
  description: "Retrieves a travel expense report from SAP Concur, validates against budget, and creates a Jira approval task."
  tags:
    - finance
    - travel
    - sap-concur
    - jira
capability:
  exposes:
    - type: mcp
      namespace: travel-expenses
      port: 8080
      tools:
        - name: process-expense-report
          description: "Validate a Concur expense report and route for approval."
          inputParameters:
            - name: report_id
              in: body
              type: string
              description: "The SAP Concur expense report ID."
          steps:
            - name: get-report
              type: call
              call: "concur.get-expense-report"
              with:
                report_id: "{{report_id}}"
            - name: create-approval
              type: call
              call: "jira.create-issue"
              with:
                project_key: "FIN"
                summary: "Expense review: {{get-report.employee_name}} - {{get-report.total_amount}} {{get-report.currency}}"
                issue_type: "Task"
                description: "Expense report {{report_id}}. Total: {{get-report.total_amount}} {{get-report.currency}}. Flagged items: {{get-report.flagged_count}}."
  consumes:
    - type: http
      namespace: concur
      baseUri: "https://us.api.concursolutions.com/api/v3.0"
      authentication:
        type: bearer
        token: "$secrets.concur_token"
      resources:
        - name: reports
          path: "/expense/reports/{{report_id}}"
          inputParameters:
            - name: report_id
              in: path
          operations:
            - name: get-expense-report
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://hasbro.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

Triggers SAP financial period close, generates reports in Power BI, archives records in Box, and notifies finance leadership via Microsoft Teams.

naftiko: "0.5"
info:
  label: "SAP Financial Close Pipeline"
  description: "Triggers SAP financial period close, generates reports in Power BI, archives records in Box, and notifies finance leadership via Microsoft Teams."
  tags:
    - finance
    - sap
    - power-bi
    - box
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: financial-close
      port: 8080
      tools:
        - name: execute-close
          description: "Orchestrate financial close across SAP, Power BI, Box, and Teams."
          inputParameters:
            - name: period
              in: body
              type: string
              description: "The financial period."
            - name: company_code
              in: body
              type: string
              description: "The SAP company code."
          steps:
            - name: close-period
              type: call
              call: "sap.close-period"
              with:
                period: "{{period}}"
                company_code: "{{company_code}}"
            - name: refresh-reports
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "financial-reports"
            - name: archive-records
              type: call
              call: "box.create-folder"
              with:
                parent_id: "financial-archive"
                name: "{{period}}_{{company_code}}"
            - name: notify-leadership
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "finance-leadership"
                text: "Financial close completed for {{period}} ({{company_code}}). Reports refreshed."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZFINANCE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: periods
          path: "/PeriodCloseSet"
          operations:
            - name: close-period
              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: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: folders
          path: "/folders"
          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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Queries the SAP warehouse inventory for a given material number, returning on-hand quantity, location, and lot details.

naftiko: "0.5"
info:
  label: "SAP Inventory Balance Lookup"
  description: "Queries the SAP warehouse inventory for a given material number, returning on-hand quantity, location, and lot details."
  tags:
    - inventory
    - sap
capability:
  exposes:
    - type: mcp
      namespace: sap-inventory
      port: 8080
      tools:
        - name: get-inventory-balance
          description: "Look up inventory balance by material number in SAP."
          inputParameters:
            - name: material_number
              in: body
              type: string
              description: "The SAP material number."
          call: "sap.get-inventory"
          with:
            material: "{{material_number}}"
          outputParameters:
            - name: on_hand_qty
              type: string
              mapping: "$.d.OnHandQty"
            - name: warehouse_location
              type: string
              mapping: "$.d.StorageLocation"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZINVENTORY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: inventory
          path: "/InventorySet('{{material}}')"
          inputParameters:
            - name: material
              in: path
          operations:
            - name: get-inventory
              method: GET

Looks up a SAP purchase order by number and returns header status, vendor, total value, and delivery date.

naftiko: "0.5"
info:
  label: "SAP Purchase Order Status"
  description: "Looks up a SAP purchase order by number and returns header status, vendor, total value, and delivery date."
  tags:
    - procurement
    - sap
    - purchase-order
capability:
  exposes:
    - type: mcp
      namespace: erp-procurement
      port: 8080
      tools:
        - name: get-purchase-order
          description: "Look up a SAP purchase order by PO number."
          inputParameters:
            - name: po_number
              in: body
              type: string
              description: "The SAP purchase order number."
          call: "sap.get-po"
          with:
            po_number: "{{po_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.OverallStatus"
            - name: vendor
              type: string
              mapping: "$.d.Supplier.CompanyName"
            - name: total_value
              type: string
              mapping: "$.d.TotalAmount"
            - name: delivery_date
              type: string
              mapping: "$.d.DeliveryDate"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/MM_PUR_PO_MAINT_V2_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: purchase-orders
          path: "/A_PurchaseOrder('{{po_number}}')"
          inputParameters:
            - name: po_number
              in: path
          operations:
            - name: get-po
              method: GET

Looks up a SAP sales order and returns status, customer, total value, and shipping date.

naftiko: "0.5"
info:
  label: "SAP Sales Order Status"
  description: "Looks up a SAP sales order and returns status, customer, total value, and shipping date."
  tags:
    - sales
    - sap
    - order-management
capability:
  exposes:
    - type: mcp
      namespace: sales-orders
      port: 8080
      tools:
        - name: get-sales-order
          description: "Look up a SAP sales order by number."
          inputParameters:
            - name: order_number
              in: body
              type: string
              description: "The SAP sales order number."
          call: "sap.get-sales-order"
          with:
            order_number: "{{order_number}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.d.OrderStatus"
            - name: customer
              type: string
              mapping: "$.d.CustomerName"
            - name: total_value
              type: string
              mapping: "$.d.TotalAmount"
            - name: ship_date
              type: string
              mapping: "$.d.ShipDate"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZSD_ORDER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: sales-orders
          path: "/SalesOrderSet('{{order_number}}')"
          inputParameters:
            - name: order_number
              in: path
          operations:
            - name: get-sales-order
              method: GET

Retrieves vendor master data from SAP by vendor number, returning vendor name, address, payment terms, and contact details.

naftiko: "0.5"
info:
  label: "SAP Vendor Master Lookup"
  description: "Retrieves vendor master data from SAP by vendor number, returning vendor name, address, payment terms, and contact details."
  tags:
    - procurement
    - sap
capability:
  exposes:
    - type: mcp
      namespace: sap-vendors
      port: 8080
      tools:
        - name: get-vendor
          description: "Look up vendor master data in SAP by vendor number."
          inputParameters:
            - name: vendor_number
              in: body
              type: string
              description: "The SAP vendor number."
          call: "sap.get-vendor"
          with:
            vendor: "{{vendor_number}}"
          outputParameters:
            - name: vendor_name
              type: string
              mapping: "$.d.VendorName"
            - name: payment_terms
              type: string
              mapping: "$.d.PaymentTerms"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZVENDOR_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: vendors
          path: "/VendorSet('{{vendor}}')"
          inputParameters:
            - name: vendor
              in: path
          operations:
            - name: get-vendor
              method: GET

Creates a seasonal promotion plan by pulling product catalog from SAP, setting up a Salesforce campaign, scheduling social posts in HubSpot, and distributing a brief to retailers via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Seasonal Promotion Planner"
  description: "Creates a seasonal promotion plan by pulling product catalog from SAP, setting up a Salesforce campaign, scheduling social posts in HubSpot, and distributing a brief to retailers via Microsoft Outlook."
  tags:
    - marketing
    - promotions
    - sap
    - salesforce
    - hubspot
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: promo-planning
      port: 8080
      tools:
        - name: plan-seasonal-promotion
          description: "Plan and distribute a seasonal promotion across all channels."
          inputParameters:
            - name: season
              in: body
              type: string
              description: "The promotional season (e.g. Holiday2026, BackToSchool)."
            - name: product_category
              in: body
              type: string
              description: "The product category to promote."
          steps:
            - name: get-products
              type: call
              call: "sap.get-promo-products"
              with:
                category: "{{product_category}}"
                season: "{{season}}"
            - name: create-campaign
              type: call
              call: "salesforce.create-campaign"
              with:
                name: "{{season}} - {{product_category}} Promotion"
                type: "Seasonal"
                status: "Planned"
            - name: schedule-social
              type: call
              call: "hubspot.create-broadcast"
              with:
                content: "Get ready for {{season}}! Check out our top {{product_category}} picks. #Hasbro #{{season}}"
                campaign_id: "{{create-campaign.Id}}"
            - name: send-retailer-brief
              type: call
              call: "outlook.send-email"
              with:
                to: "retail-partners@hasbro.com"
                subject: "{{season}} Promotion Brief - {{product_category}}"
                body: "Dear Retail Partners, please find the {{season}} promotion lineup for {{product_category}}. Featured products: {{get-products.featured_list}}. Campaign ID: {{create-campaign.Id}}."
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_PRODUCT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: promo-products
          path: "/PromoProductSet?$filter=Category eq '{{category}}' and Season eq '{{season}}'"
          inputParameters:
            - name: category
              in: query
            - name: season
              in: query
          operations:
            - name: get-promo-products
              method: GET
    - type: http
      namespace: salesforce
      baseUri: "https://hasbro.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: campaigns
          path: "/sobjects/Campaign"
          operations:
            - name: create-campaign
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: broadcasts
          path: "/broadcast/v1/broadcasts"
          operations:
            - name: create-broadcast
              method: POST
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0/me"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/sendMail"
          operations:
            - name: send-email
              method: POST

On vulnerability detection from Cloudflare, creates a Jira security ticket, notifies security team via Slack, triggers patch deployment in Azure DevOps, and logs in ServiceNow.

naftiko: "0.5"
info:
  label: "Security Vulnerability Remediation Pipeline"
  description: "On vulnerability detection from Cloudflare, creates a Jira security ticket, notifies security team via Slack, triggers patch deployment in Azure DevOps, and logs in ServiceNow."
  tags:
    - security
    - cloudflare
    - jira
    - slack
    - azure-devops
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: vuln-remediation
      port: 8080
      tools:
        - name: remediate-vulnerability
          description: "Orchestrate security vulnerability remediation across Cloudflare, Jira, Slack, Azure DevOps, and ServiceNow."
          inputParameters:
            - name: vuln_id
              in: body
              type: string
              description: "The vulnerability ID."
            - name: severity
              in: body
              type: string
              description: "The severity level."
          steps:
            - name: get-vuln-details
              type: call
              call: "cloudflare.get-vulnerability"
              with:
                id: "{{vuln_id}}"
            - name: create-ticket
              type: call
              call: "jira.create-issue"
              with:
                project: "SEC"
                summary: "Vulnerability: {{get-vuln-details.name}}"
                priority: "{{severity}}"
            - name: alert-team
              type: call
              call: "slack.post-message"
              with:
                channel: "security-ops"
                text: "VULN ALERT [{{severity}}]: {{get-vuln-details.name}}. Jira: {{create-ticket.key}}"
            - name: trigger-patch
              type: call
              call: "azuredevops.queue-build"
              with:
                definition_id: "security-patch"
                parameters: "{\"vuln\":\"{{vuln_id}}\"}"
  consumes:
    - type: http
      namespace: cloudflare
      baseUri: "https://api.cloudflare.com/client/v4"
      authentication:
        type: bearer
        token: "$secrets.cloudflare_token"
      resources:
        - name: vulnerabilities
          path: "/zones/hasbro/vulnerabilities/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-vulnerability
              method: GET
    - type: http
      namespace: jira
      baseUri: "https://hasbro.atlassian.net/rest/api/3"
      authentication:
        type: bearer
        token: "$secrets.jira_token"
      resources:
        - name: issues
          path: "/issue"
          operations:
            - name: create-issue
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: azuredevops
      baseUri: "https://dev.azure.com/hasbro/_apis"
      authentication:
        type: bearer
        token: "$secrets.azuredevops_token"
      resources:
        - name: builds
          path: "/build/builds?api-version=7.0"
          operations:
            - name: queue-build
              method: POST

Pulls search performance from Google Analytics, identifies optimization opportunities, updates product descriptions in BigCommerce, and reports via Google Sheets.

naftiko: "0.5"
info:
  label: "SEO Content Optimization Pipeline"
  description: "Pulls search performance from Google Analytics, identifies optimization opportunities, updates product descriptions in BigCommerce, and reports via Google Sheets."
  tags:
    - seo
    - google-analytics
    - bigcommerce
    - google-sheets
capability:
  exposes:
    - type: mcp
      namespace: seo-optimization
      port: 8080
      tools:
        - name: optimize-seo
          description: "Orchestrate SEO content optimization across Google Analytics, BigCommerce, and Google Sheets."
          inputParameters:
            - name: product_category
              in: body
              type: string
              description: "The product category."
          steps:
            - name: get-search-data
              type: call
              call: "ga.get-search-report"
              with:
                category: "{{product_category}}"
            - name: update-descriptions
              type: call
              call: "bigcommerce.update-products"
              with:
                category: "{{product_category}}"
                seo_data: "{{get-search-data.recommendations}}"
            - name: update-tracker
              type: call
              call: "gsheets.append-row"
              with:
                spreadsheet_id: "seo-tracker"
                values: "{{product_category}},{{get-search-data.impressions}},{{get-search-data.clicks}}"
  consumes:
    - type: http
      namespace: ga
      baseUri: "https://analyticsdata.googleapis.com/v1beta"
      authentication:
        type: bearer
        token: "$secrets.google_token"
      resources:
        - name: reports
          path: "/properties/hasbro:runReport"
          operations:
            - name: get-search-report
              method: POST
    - type: http
      namespace: bigcommerce
      baseUri: "https://api.bigcommerce.com/stores/hasbro/v3"
      authentication:
        type: bearer
        token: "$secrets.bigcommerce_token"
      resources:
        - name: products
          path: "/catalog/products"
          operations:
            - name: update-products
              method: PUT
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4/spreadsheets"
      authentication:
        type: bearer
        token: "$secrets.google_token"
      resources:
        - name: values
          path: "/{{spreadsheet_id}}/values/Sheet1:append?valueInputOption=RAW"
          inputParameters:
            - name: spreadsheet_id
              in: path
          operations:
            - name: append-row
              method: POST

Retrieves a ServiceNow incident by number, returning state, priority, and assigned group.

naftiko: "0.5"
info:
  label: "ServiceNow IT Ticket Status"
  description: "Retrieves a ServiceNow incident by number, returning state, priority, and assigned group."
  tags:
    - it-service
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: itsm-tickets
      port: 8080
      tools:
        - name: get-ticket-status
          description: "Look up a ServiceNow incident by number."
          inputParameters:
            - name: incident_number
              in: body
              type: string
              description: "The ServiceNow incident number."
          call: "servicenow.get-incident"
          with:
            incident_number: "{{incident_number}}"
          outputParameters:
            - name: state
              type: string
              mapping: "$.result[0].state"
            - name: priority
              type: string
              mapping: "$.result[0].priority"
            - name: assigned_group
              type: string
              mapping: "$.result[0].assignment_group.display_value"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://hasbro.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 SharePoint by path, returning download URL and metadata.

naftiko: "0.5"
info:
  label: "SharePoint Document Retrieval"
  description: "Retrieves a document from SharePoint by path, returning download URL and metadata."
  tags:
    - document-management
    - sharepoint
capability:
  exposes:
    - type: mcp
      namespace: doc-management
      port: 8080
      tools:
        - name: get-document
          description: "Retrieve a document from SharePoint."
          inputParameters:
            - name: site_id
              in: body
              type: string
              description: "The SharePoint site ID."
            - name: file_path
              in: body
              type: string
              description: "The 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: drive-items
          path: "/{{site_id}}/drive/root:/{{file_path}}"
          inputParameters:
            - name: site_id
              in: path
            - name: file_path
              in: path
          operations:
            - name: get-file
              method: GET

Sends a message to a specified Slack channel, returning the message timestamp and channel confirmation.

naftiko: "0.5"
info:
  label: "Slack Channel Message Sender"
  description: "Sends a message to a specified Slack channel, returning the message timestamp and channel confirmation."
  tags:
    - communications
    - slack
capability:
  exposes:
    - type: mcp
      namespace: slack-messaging
      port: 8080
      tools:
        - name: send-message
          description: "Send a message to a Slack channel."
          inputParameters:
            - name: channel_name
              in: body
              type: string
              description: "The Slack channel name."
            - name: message_text
              in: body
              type: string
              description: "The message content."
          call: "slack.post-message"
          with:
            channel: "{{channel_name}}"
            text: "{{message_text}}"
          outputParameters:
            - name: timestamp
              type: string
              mapping: "$.ts"
  consumes:
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Executes a parameterized query against Snowflake to retrieve aggregated sales data by product category and date range.

naftiko: "0.5"
info:
  label: "Snowflake Sales Data Query"
  description: "Executes a parameterized query against Snowflake to retrieve aggregated sales data by product category and date range."
  tags:
    - analytics
    - snowflake
capability:
  exposes:
    - type: mcp
      namespace: snowflake-sales
      port: 8080
      tools:
        - name: query-sales
          description: "Query aggregated sales data from Snowflake by category."
          inputParameters:
            - name: category
              in: body
              type: string
              description: "The product category to filter."
          call: "snowflake.run-query"
          with:
            category: "{{category}}"
          outputParameters:
            - name: total_revenue
              type: string
              mapping: "$.data[0].TOTAL_REVENUE"
            - name: units_sold
              type: string
              mapping: "$.data[0].UNITS_SOLD"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://hasbro.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST

Creates a social media campaign across Facebook, Instagram, and Twitter via HubSpot, pulling product imagery from SharePoint.

naftiko: "0.5"
info:
  label: "Social Media Campaign Publisher"
  description: "Creates a social media campaign across Facebook, Instagram, and Twitter via HubSpot, pulling product imagery from SharePoint."
  tags:
    - marketing
    - social-media
    - hubspot
    - sharepoint
    - facebook
    - instagram
    - twitter
capability:
  exposes:
    - type: mcp
      namespace: social-campaigns
      port: 8080
      tools:
        - name: publish-social-campaign
          description: "Create and publish a social media campaign with product assets."
          inputParameters:
            - name: product_sku
              in: body
              type: string
              description: "The product SKU for imagery."
            - name: campaign_message
              in: body
              type: string
              description: "The campaign message text."
          steps:
            - name: get-assets
              type: call
              call: "sharepoint.get-folder"
              with:
                site_id: "marketing_site"
                folder_path: "ProductAssets/{{product_sku}}"
            - name: create-broadcast
              type: call
              call: "hubspot.create-broadcast"
              with:
                content: "{{campaign_message}}"
                channels:
                  - "facebook"
                  - "instagram"
                  - "twitter"
                media_url: "{{get-assets.items[0].webUrl}}"
  consumes:
    - 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}}:/children"
          inputParameters:
            - name: site_id
              in: path
            - name: folder_path
              in: path
          operations:
            - name: get-folder
              method: GET
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: broadcasts
          path: "/broadcast/v1/broadcasts"
          operations:
            - name: create-broadcast
              method: POST

Retrieves a Stripe payment intent by ID, returning payment status, amount, currency, and payment method type.

naftiko: "0.5"
info:
  label: "Stripe Payment Lookup"
  description: "Retrieves a Stripe payment intent by ID, returning payment status, amount, currency, and payment method type."
  tags:
    - payments
    - stripe
capability:
  exposes:
    - type: mcp
      namespace: stripe-payments
      port: 8080
      tools:
        - name: get-payment
          description: "Look up a Stripe payment intent by ID."
          inputParameters:
            - name: payment_id
              in: body
              type: string
              description: "The Stripe payment intent ID."
          call: "stripe.get-payment"
          with:
            id: "{{payment_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.status"
            - name: amount
              type: string
              mapping: "$.amount"
            - name: currency
              type: string
              mapping: "$.currency"
  consumes:
    - type: http
      namespace: stripe
      baseUri: "https://api.stripe.com/v1"
      authentication:
        type: bearer
        token: "$secrets.stripe_secret_key"
      resources:
        - name: payment-intents
          path: "/payment_intents/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-payment
              method: GET

Aggregates supplier delivery data from SAP, calculates scores in Snowflake, generates scorecards in Google Sheets, and distributes via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Supplier Performance Scorecard Pipeline"
  description: "Aggregates supplier delivery data from SAP, calculates scores in Snowflake, generates scorecards in Google Sheets, and distributes via Microsoft Outlook."
  tags:
    - procurement
    - sap
    - snowflake
    - google-sheets
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: supplier-scorecard
      port: 8080
      tools:
        - name: generate-scorecard
          description: "Orchestrate supplier performance scorecard generation across SAP, Snowflake, Google Sheets, and Outlook."
          inputParameters:
            - name: supplier_id
              in: body
              type: string
              description: "The supplier ID."
            - name: period
              in: body
              type: string
              description: "The reporting period."
          steps:
            - name: get-delivery-data
              type: call
              call: "sap.get-supplier-deliveries"
              with:
                supplier: "{{supplier_id}}"
                period: "{{period}}"
            - name: calculate-scores
              type: call
              call: "snowflake.run-scoring"
              with:
                supplier: "{{supplier_id}}"
                data: "{{get-delivery-data.results}}"
            - name: create-scorecard
              type: call
              call: "gsheets.create-spreadsheet"
              with:
                title: "Scorecard - {{supplier_id}} - {{period}}"
            - name: distribute
              type: call
              call: "outlook.send-email"
              with:
                to: "procurement@hasbro.com"
                subject: "Supplier Scorecard: {{supplier_id}} - {{period}}"
                body: "Score: {{calculate-scores.overall_score}}. Report: {{create-scorecard.spreadsheetUrl}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZSUPPLIER_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: deliveries
          path: "/DeliverySet?$filter=Supplier eq '{{supplier}}'"
          inputParameters:
            - name: supplier
              in: path
          operations:
            - name: get-supplier-deliveries
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://hasbro.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-scoring
              method: POST
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets"
          operations:
            - name: create-spreadsheet
              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 supplier data from SAP Ariba, creates an audit checklist in ServiceNow, assigns an auditor via Workday, and notifies the quality team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Supplier Quality Audit Orchestrator"
  description: "Pulls supplier data from SAP Ariba, creates an audit checklist in ServiceNow, assigns an auditor via Workday, and notifies the quality team in Microsoft Teams."
  tags:
    - procurement
    - quality
    - sap-ariba
    - servicenow
    - workday
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: supplier-audit
      port: 8080
      tools:
        - name: initiate-supplier-audit
          description: "Initiate a supplier quality audit across Ariba, ServiceNow, and Workday."
          inputParameters:
            - name: supplier_id
              in: body
              type: string
              description: "The SAP Ariba supplier ID."
          steps:
            - name: get-supplier
              type: call
              call: "ariba.get-supplier"
              with:
                supplier_id: "{{supplier_id}}"
            - name: create-audit
              type: call
              call: "servicenow.create-record"
              with:
                table: "u_supplier_audits"
                short_description: "Quality audit: {{get-supplier.name}}"
                description: "Supplier: {{get-supplier.name}}. Category: {{get-supplier.category}}. Last audit: {{get-supplier.last_audit_date}}."
                assigned_group: "Quality_Assurance"
            - name: get-auditor
              type: call
              call: "workday.get-available-auditor"
              with:
                department: "Quality"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "quality-audits"
                text: "Supplier audit initiated for {{get-supplier.name}}. Auditor: {{get-auditor.full_name}}. ServiceNow: {{create-audit.number}}."
  consumes:
    - type: http
      namespace: ariba
      baseUri: "https://openapi.ariba.com/api/supplier-management/v2"
      authentication:
        type: bearer
        token: "$secrets.ariba_token"
      resources:
        - name: suppliers
          path: "/suppliers/{{supplier_id}}"
          inputParameters:
            - name: supplier_id
              in: path
          operations:
            - name: get-supplier
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://hasbro.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: auditors
          path: "/workers?department={{department}}&role=auditor"
          inputParameters:
            - name: department
              in: query
          operations:
            - name: get-available-auditor
              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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Collects environmental data from SAP, aggregates metrics in Snowflake, generates sustainability reports in Google Sheets, and publishes to Confluence.

naftiko: "0.5"
info:
  label: "Sustainability Reporting Pipeline"
  description: "Collects environmental data from SAP, aggregates metrics in Snowflake, generates sustainability reports in Google Sheets, and publishes to Confluence."
  tags:
    - sustainability
    - sap
    - snowflake
    - google-sheets
    - confluence
capability:
  exposes:
    - type: mcp
      namespace: sustainability-report
      port: 8080
      tools:
        - name: generate-sustainability-report
          description: "Orchestrate sustainability reporting across SAP, Snowflake, Google Sheets, and Confluence."
          inputParameters:
            - name: period
              in: body
              type: string
              description: "The reporting period."
          steps:
            - name: get-env-data
              type: call
              call: "sap.get-environmental-data"
              with:
                period: "{{period}}"
            - name: aggregate-metrics
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT * FROM SUSTAINABILITY_METRICS WHERE period='{{period}}'"
            - name: create-report
              type: call
              call: "gsheets.create-spreadsheet"
              with:
                title: "Sustainability Report - {{period}}"
            - name: publish
              type: call
              call: "confluence.create-page"
              with:
                space_key: "ESG"
                title: "Sustainability Report: {{period}}"
                body: "Carbon footprint: {{aggregate-metrics.carbon_total}}. Report: {{create-report.spreadsheetUrl}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZENVIRO_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: environmental
          path: "/EnvironmentalDataSet"
          operations:
            - name: get-environmental-data
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://hasbro.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              method: POST
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets"
          operations:
            - name: create-spreadsheet
              method: POST
    - type: http
      namespace: confluence
      baseUri: "https://hasbro.atlassian.net/wiki/api/v2"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST

Retrieves a Tableau workbook view for brand performance metrics, returning the view URL and last refresh timestamp.

naftiko: "0.5"
info:
  label: "Tableau Brand Performance Report"
  description: "Retrieves a Tableau workbook view for brand performance metrics, returning the view URL and last refresh timestamp."
  tags:
    - analytics
    - tableau
capability:
  exposes:
    - type: mcp
      namespace: tableau-reports
      port: 8080
      tools:
        - name: get-brand-report
          description: "Retrieve Tableau brand performance report by brand name."
          inputParameters:
            - name: brand_name
              in: body
              type: string
              description: "The brand name to filter the report."
          call: "tableau.get-view"
          with:
            brand: "{{brand_name}}"
          outputParameters:
            - name: view_url
              type: string
              mapping: "$.view.contentUrl"
            - name: last_refresh
              type: string
              mapping: "$.view.updatedAt"
  consumes:
    - type: http
      namespace: tableau
      baseUri: "https://tableau.hasbro.com/api/3.19"
      authentication:
        type: bearer
        token: "$secrets.tableau_token"
      resources:
        - name: views
          path: "/sites/hasbro/views?filter=name:eq:BrandPerformance_{{brand}}"
          inputParameters:
            - name: brand
              in: path
          operations:
            - name: get-view
              method: GET

Posts job listings to LinkedIn, syncs applicants to Workday, creates interview schedules in Zoom, and notifies hiring managers via Slack.

naftiko: "0.5"
info:
  label: "Talent Acquisition Pipeline"
  description: "Posts job listings to LinkedIn, syncs applicants to Workday, creates interview schedules in Zoom, and notifies hiring managers via Slack."
  tags:
    - recruiting
    - linkedin
    - workday
    - zoom
    - slack
capability:
  exposes:
    - type: mcp
      namespace: talent-acquisition
      port: 8080
      tools:
        - name: manage-hiring
          description: "Orchestrate talent acquisition across LinkedIn, Workday, Zoom, and Slack."
          inputParameters:
            - name: job_title
              in: body
              type: string
              description: "The job title."
            - name: department
              in: body
              type: string
              description: "The department."
          steps:
            - name: post-job
              type: call
              call: "linkedin.create-job-post"
              with:
                title: "{{job_title}}"
                department: "{{department}}"
                company: "Hasbro"
            - name: create-requisition
              type: call
              call: "workday.create-requisition"
              with:
                title: "{{job_title}}"
                department: "{{department}}"
            - name: setup-interviews
              type: call
              call: "zoom.create-meeting"
              with:
                topic: "Interview: {{job_title}}"
                type: "scheduled"
            - name: notify-manager
              type: call
              call: "slack.post-message"
              with:
                channel: "hiring-{{department}}"
                text: "Job posted: {{job_title}}. LinkedIn: {{post-job.url}}. Requisition: {{create-requisition.id}}"
  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-post
              method: POST
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/service/hasbro"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: requisitions
          path: "/Recruiting/Job_Requisitions"
          operations:
            - name: create-requisition
              method: POST
    - 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
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Queries the Teradata data warehouse for historical sales data by product line and region.

naftiko: "0.5"
info:
  label: "Teradata Sales Data Warehouse Query"
  description: "Queries the Teradata data warehouse for historical sales data by product line and region."
  tags:
    - analytics
    - data-warehouse
    - teradata
capability:
  exposes:
    - type: mcp
      namespace: sales-dwh
      port: 8080
      tools:
        - name: query-sales-history
          description: "Query Teradata for historical sales by product line."
          inputParameters:
            - name: product_line
              in: body
              type: string
              description: "The product line."
            - name: region
              in: body
              type: string
              description: "The sales region."
          call: "teradata.query-sales"
          with:
            product_line: "{{product_line}}"
            region: "{{region}}"
          outputParameters:
            - name: total_revenue
              type: string
              mapping: "$.results.total_revenue"
            - name: total_units
              type: integer
              mapping: "$.results.total_units"
  consumes:
    - type: http
      namespace: teradata
      baseUri: "https://hasbro-td.teradata.com/api/query/v1"
      authentication:
        type: bearer
        token: "$secrets.teradata_token"
      resources:
        - name: queries
          path: "/execute"
          operations:
            - name: query-sales
              method: POST

Retrieves product safety test results from SAP, checks against compliance requirements, and creates a ServiceNow task if any test fails.

naftiko: "0.5"
info:
  label: "Toy Safety Compliance Checker"
  description: "Retrieves product safety test results from SAP, checks against compliance requirements, and creates a ServiceNow task if any test fails."
  tags:
    - compliance
    - safety
    - sap
    - servicenow
capability:
  exposes:
    - type: mcp
      namespace: safety-compliance
      port: 8080
      tools:
        - name: check-safety-compliance
          description: "Check product safety test results and flag failures."
          inputParameters:
            - name: product_sku
              in: body
              type: string
              description: "The product SKU to check."
          steps:
            - name: get-test-results
              type: call
              call: "sap.get-safety-tests"
              with:
                sku: "{{product_sku}}"
            - name: create-task
              type: call
              call: "servicenow.create-record"
              with:
                table: "u_compliance_tasks"
                short_description: "Safety review: {{product_sku}} - {{get-test-results.failed_count}} failures"
                description: "Product {{product_sku}} has {{get-test-results.failed_count}} failed safety tests. Categories: {{get-test-results.failed_categories}}. Tested: {{get-test-results.test_date}}."
                assigned_group: "Product_Safety_Team"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_SAFETY_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: safety-tests
          path: "/SafetyTestSet('{{sku}}')"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: get-safety-tests
              method: GET
    - type: http
      namespace: servicenow
      baseUri: "https://hasbro.service-now.com/api/now"
      authentication:
        type: basic
        username: "$secrets.servicenow_user"
        password: "$secrets.servicenow_password"
      resources:
        - name: records
          path: "/table/{{table}}"
          inputParameters:
            - name: table
              in: path
          operations:
            - name: create-record
              method: POST

On safety recall initiation, creates a ServiceNow incident, notifies the product safety team via Slack, updates the SAP product status, and sends retailer notifications through Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Toy Safety Recall Orchestrator"
  description: "On safety recall initiation, creates a ServiceNow incident, notifies the product safety team via Slack, updates the SAP product status, and sends retailer notifications through Microsoft Outlook."
  tags:
    - safety
    - servicenow
    - slack
    - sap
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: safety-recall
      port: 8080
      tools:
        - name: initiate-recall
          description: "Orchestrate a toy safety recall across ServiceNow, Slack, SAP, and Outlook."
          inputParameters:
            - name: product_sku
              in: body
              type: string
              description: "The affected product SKU."
            - name: recall_reason
              in: body
              type: string
              description: "The reason for the recall."
            - name: severity
              in: body
              type: string
              description: "The severity level (low, medium, high, critical)."
          steps:
            - name: create-incident
              type: call
              call: "servicenow.create-incident"
              with:
                short_description: "Safety Recall: {{product_sku}} - {{recall_reason}}"
                urgency: "{{severity}}"
                category: "Product Safety"
            - name: notify-safety-team
              type: call
              call: "slack.post-message"
              with:
                channel: "product-safety"
                text: "RECALL ALERT: {{product_sku}} - {{recall_reason}}. Severity: {{severity}}. Incident: {{create-incident.number}}"
            - name: update-product-status
              type: call
              call: "sap.update-product"
              with:
                sku: "{{product_sku}}"
                status: "RECALLED"
            - name: notify-retailers
              type: call
              call: "outlook.send-email"
              with:
                to: "retail-partners@hasbro.com"
                subject: "Product Recall Notice: {{product_sku}}"
                body: "A recall has been initiated for {{product_sku}} due to {{recall_reason}}. Please remove from shelves immediately. Reference: {{create-incident.number}}"
  consumes:
    - type: http
      namespace: servicenow
      baseUri: "https://hasbro.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: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZPR_PRODUCT_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: products
          path: "/ProductSet('{{sku}}')"
          inputParameters:
            - name: sku
              in: path
          operations:
            - name: update-product
              method: PATCH
    - 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

On trade show registration, creates a Salesforce campaign, schedules meetings via Zoom, uploads booth materials to SharePoint, and sends invitations via MailChimp.

naftiko: "0.5"
info:
  label: "Trade Show Event Coordinator"
  description: "On trade show registration, creates a Salesforce campaign, schedules meetings via Zoom, uploads booth materials to SharePoint, and sends invitations via MailChimp."
  tags:
    - events
    - salesforce
    - zoom
    - sharepoint
    - mailchimp
capability:
  exposes:
    - type: mcp
      namespace: trade-show
      port: 8080
      tools:
        - name: coordinate-trade-show
          description: "Orchestrate trade show coordination across Salesforce, Zoom, SharePoint, and MailChimp."
          inputParameters:
            - name: event_name
              in: body
              type: string
              description: "The trade show event name."
            - name: event_date
              in: body
              type: string
              description: "The event date."
          steps:
            - name: create-campaign
              type: call
              call: "salesforce.create-campaign"
              with:
                name: "{{event_name}}"
                type: "Trade Show"
                start_date: "{{event_date}}"
            - name: schedule-meetings
              type: call
              call: "zoom.create-meeting"
              with:
                topic: "{{event_name}} - Buyer Meetings"
                start_time: "{{event_date}}T09:00:00Z"
            - name: upload-materials
              type: call
              call: "sharepoint.upload-file"
              with:
                site: "marketing"
                folder: "TradeShows/{{event_name}}"
            - name: send-invitations
              type: call
              call: "mailchimp.send-campaign"
              with:
                subject: "Join Hasbro at {{event_name}}"
                list_id: "trade-show-contacts"
  consumes:
    - type: http
      namespace: salesforce
      baseUri: "https://hasbro.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: campaigns
          path: "/sobjects/Campaign"
          operations:
            - name: create-campaign
              method: POST
    - 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
    - type: http
      namespace: sharepoint
      baseUri: "https://graph.microsoft.com/v1.0/sites"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: files
          path: "/{{site}}/drive/root:/{{folder}}"
          inputParameters:
            - name: site
              in: path
            - name: folder
              in: path
          operations:
            - name: upload-file
              method: PUT
    - type: http
      namespace: mailchimp
      baseUri: "https://us1.api.mailchimp.com/3.0"
      authentication:
        type: bearer
        token: "$secrets.mailchimp_token"
      resources:
        - name: campaigns
          path: "/campaigns"
          operations:
            - name: send-campaign
              method: POST

Pulls training completion data from Pluralsight, syncs with Workday employee records, generates compliance reports in Google Sheets, and alerts managers via Slack.

naftiko: "0.5"
info:
  label: "Training Compliance Tracker Pipeline"
  description: "Pulls training completion data from Pluralsight, syncs with Workday employee records, generates compliance reports in Google Sheets, and alerts managers via Slack."
  tags:
    - training
    - pluralsight
    - workday
    - google-sheets
    - slack
capability:
  exposes:
    - type: mcp
      namespace: training-compliance
      port: 8080
      tools:
        - name: track-compliance
          description: "Orchestrate training compliance tracking across Pluralsight, Workday, Google Sheets, and Slack."
          inputParameters:
            - name: department
              in: body
              type: string
              description: "The department."
            - name: course_id
              in: body
              type: string
              description: "The required course ID."
          steps:
            - name: get-completions
              type: call
              call: "pluralsight.get-course-completions"
              with:
                course: "{{course_id}}"
            - name: get-employees
              type: call
              call: "workday.get-department-roster"
              with:
                department: "{{department}}"
            - name: generate-report
              type: call
              call: "gsheets.create-spreadsheet"
              with:
                title: "Training Compliance: {{department}} - {{course_id}}"
            - name: alert-managers
              type: call
              call: "slack.post-message"
              with:
                channel: "{{department}}-managers"
                text: "Training compliance report ready. Completion rate: {{get-completions.rate}}%"
  consumes:
    - type: http
      namespace: pluralsight
      baseUri: "https://api.pluralsight.com/v1"
      authentication:
        type: bearer
        token: "$secrets.pluralsight_token"
      resources:
        - name: completions
          path: "/courses/{{course}}/completions"
          inputParameters:
            - name: course
              in: path
          operations:
            - name: get-course-completions
              method: GET
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/service/hasbro"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: departments
          path: "/Human_Resources/Departments/{{department}}"
          inputParameters:
            - name: department
              in: path
          operations:
            - name: get-department-roster
              method: GET
    - type: http
      namespace: gsheets
      baseUri: "https://sheets.googleapis.com/v4"
      authentication:
        type: bearer
        token: "$secrets.google_token"
      resources:
        - name: spreadsheets
          path: "/spreadsheets"
          operations:
            - name: create-spreadsheet
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Triggers a Unity Cloud Build for a Hasbro digital game, waits for completion, uploads the artifact to Amazon S3, and notifies the game dev team in Microsoft Teams.

naftiko: "0.5"
info:
  label: "Unity Game Build Pipeline"
  description: "Triggers a Unity Cloud Build for a Hasbro digital game, waits for completion, uploads the artifact to Amazon S3, and notifies the game dev team in Microsoft Teams."
  tags:
    - gaming
    - development
    - unity
    - amazon-s3
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: game-builds
      port: 8080
      tools:
        - name: trigger-game-build
          description: "Trigger a Unity Cloud Build and distribute the artifact."
          inputParameters:
            - name: project_id
              in: body
              type: string
              description: "The Unity Cloud project ID."
            - name: build_target
              in: body
              type: string
              description: "The build target (e.g. ios, android, webgl)."
          steps:
            - name: start-build
              type: call
              call: "unity.start-build"
              with:
                project_id: "{{project_id}}"
                build_target: "{{build_target}}"
            - name: upload-artifact
              type: call
              call: "s3.put-object"
              with:
                bucket: "hasbro-game-builds"
                key: "{{project_id}}/{{build_target}}/{{start-build.build_number}}.zip"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "game-dev"
                text: "Unity build #{{start-build.build_number}} for {{project_id}} ({{build_target}}) complete. S3: s3://hasbro-game-builds/{{project_id}}/{{build_target}}/{{start-build.build_number}}.zip"
  consumes:
    - type: http
      namespace: unity
      baseUri: "https://build-api.cloud.unity3d.com/api/v1"
      authentication:
        type: bearer
        token: "$secrets.unity_token"
      resources:
        - name: builds
          path: "/orgs/hasbro/projects/{{project_id}}/buildtargets/{{build_target}}/builds"
          inputParameters:
            - name: project_id
              in: path
            - name: build_target
              in: path
          operations:
            - name: start-build
              method: POST
    - 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: msteams
      baseUri: "https://graph.microsoft.com/v1.0"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: channel-messages
          path: "/teams/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

On new vendor approval, creates the vendor record in SAP, sets up a shared folder in Box, adds the vendor to Salesforce, and sends welcome package via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Vendor Onboarding Orchestrator"
  description: "On new vendor approval, creates the vendor record in SAP, sets up a shared folder in Box, adds the vendor to Salesforce, and sends welcome package via Microsoft Outlook."
  tags:
    - procurement
    - sap
    - box
    - salesforce
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: vendor-onboarding
      port: 8080
      tools:
        - name: onboard-vendor
          description: "Orchestrate vendor onboarding across SAP, Box, Salesforce, and Outlook."
          inputParameters:
            - name: vendor_name
              in: body
              type: string
              description: "The vendor company name."
            - name: vendor_email
              in: body
              type: string
              description: "The vendor primary contact email."
          steps:
            - name: create-sap-vendor
              type: call
              call: "sap.create-vendor"
              with:
                name: "{{vendor_name}}"
                email: "{{vendor_email}}"
            - name: create-shared-folder
              type: call
              call: "box.create-folder"
              with:
                folder_name: "Vendor_{{vendor_name}}"
                parent_id: "vendor-documents"
            - name: create-salesforce-account
              type: call
              call: "salesforce.create-account"
              with:
                name: "{{vendor_name}}"
                type: "Vendor"
                vendor_id: "{{create-sap-vendor.VendorNumber}}"
            - name: send-welcome
              type: call
              call: "outlook.send-email"
              with:
                to: "{{vendor_email}}"
                subject: "Welcome to Hasbro Vendor Network"
                body: "Welcome {{vendor_name}}! Your vendor ID is {{create-sap-vendor.VendorNumber}}. Shared documents: {{create-shared-folder.url}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZVENDOR_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: vendors
          path: "/VendorSet"
          operations:
            - name: create-vendor
              method: POST
    - type: http
      namespace: box
      baseUri: "https://api.box.com/2.0"
      authentication:
        type: bearer
        token: "$secrets.box_token"
      resources:
        - name: folders
          path: "/folders"
          operations:
            - name: create-folder
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://hasbro.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: accounts
          path: "/sobjects/Account"
          operations:
            - name: create-account
              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 SAP warehouse utilization, cross-references demand forecasts in Snowflake, updates capacity dashboards in Power BI, and alerts operations via Slack.

naftiko: "0.5"
info:
  label: "Warehouse Capacity Planning Pipeline"
  description: "Queries SAP warehouse utilization, cross-references demand forecasts in Snowflake, updates capacity dashboards in Power BI, and alerts operations via Slack."
  tags:
    - logistics
    - sap
    - snowflake
    - power-bi
    - slack
capability:
  exposes:
    - type: mcp
      namespace: warehouse-planning
      port: 8080
      tools:
        - name: plan-capacity
          description: "Orchestrate warehouse capacity planning across SAP, Snowflake, Power BI, and Slack."
          inputParameters:
            - name: warehouse_id
              in: body
              type: string
              description: "The warehouse ID."
            - name: planning_horizon
              in: body
              type: string
              description: "The planning period."
          steps:
            - name: get-utilization
              type: call
              call: "sap.get-warehouse-util"
              with:
                warehouse: "{{warehouse_id}}"
            - name: get-forecast
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT * FROM DEMAND_FORECAST WHERE warehouse='{{warehouse_id}}' AND period='{{planning_horizon}}'"
            - name: refresh-dashboard
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "warehouse-capacity"
            - name: alert-operations
              type: call
              call: "slack.post-message"
              with:
                channel: "warehouse-ops"
                text: "Capacity update for {{warehouse_id}}: Current utilization {{get-utilization.percentage}}%. Forecast period: {{planning_horizon}}"
  consumes:
    - type: http
      namespace: sap
      baseUri: "https://hasbro-s4.sap.com/sap/opu/odata/sap/ZWAREHOUSE_SRV"
      authentication:
        type: basic
        username: "$secrets.sap_user"
        password: "$secrets.sap_password"
      resources:
        - name: warehouses
          path: "/WarehouseSet('{{warehouse}}')"
          inputParameters:
            - name: warehouse
              in: path
          operations:
            - name: get-warehouse-util
              method: GET
    - type: http
      namespace: snowflake
      baseUri: "https://hasbro.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              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: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Aggregates weekly sales from Snowflake, generates a Power BI report, creates a summary in Confluence, and distributes via Slack.

naftiko: "0.5"
info:
  label: "Weekly Sales Digest Pipeline"
  description: "Aggregates weekly sales from Snowflake, generates a Power BI report, creates a summary in Confluence, and distributes via Slack."
  tags:
    - sales
    - snowflake
    - power-bi
    - confluence
    - slack
capability:
  exposes:
    - type: mcp
      namespace: sales-digest
      port: 8080
      tools:
        - name: generate-digest
          description: "Orchestrate weekly sales digest across Snowflake, Power BI, Confluence, and Slack."
          inputParameters:
            - name: week_ending
              in: body
              type: string
              description: "The week ending date."
          steps:
            - name: query-sales
              type: call
              call: "snowflake.run-query"
              with:
                query: "SELECT * FROM WEEKLY_SALES WHERE week_ending='{{week_ending}}'"
            - name: refresh-report
              type: call
              call: "powerbi.refresh-dataset"
              with:
                dataset_id: "weekly-sales"
            - name: publish-summary
              type: call
              call: "confluence.create-page"
              with:
                space_key: "SALES"
                title: "Weekly Sales Digest - {{week_ending}}"
            - name: distribute
              type: call
              call: "slack.post-message"
              with:
                channel: "sales-leadership"
                text: "Weekly sales digest for {{week_ending}} is ready. Total: ${{query-sales.total_revenue}}"
  consumes:
    - type: http
      namespace: snowflake
      baseUri: "https://hasbro.snowflakecomputing.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.snowflake_token"
      resources:
        - name: statements
          path: "/statements"
          operations:
            - name: run-query
              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: confluence
      baseUri: "https://hasbro.atlassian.net/wiki/api/v2"
      authentication:
        type: bearer
        token: "$secrets.confluence_token"
      resources:
        - name: pages
          path: "/pages"
          operations:
            - name: create-page
              method: POST
    - type: http
      namespace: slack
      baseUri: "https://slack.com/api"
      authentication:
        type: bearer
        token: "$secrets.slack_bot_token"
      resources:
        - name: messages
          path: "/chat.postMessage"
          operations:
            - name: post-message
              method: POST

Retrieves an employee benefits enrollment summary from Workday by employee ID, returning plan name, coverage level, and effective date.

naftiko: "0.5"
info:
  label: "Workday Benefits Enrollment Lookup"
  description: "Retrieves an employee benefits enrollment summary from Workday by employee ID, returning plan name, coverage level, and effective date."
  tags:
    - hr
    - workday
capability:
  exposes:
    - type: mcp
      namespace: workday-benefits
      port: 8080
      tools:
        - name: get-benefits
          description: "Look up employee benefits enrollment in Workday."
          inputParameters:
            - name: employee_id
              in: body
              type: string
              description: "The Workday employee ID."
          call: "workday.get-benefits"
          with:
            id: "{{employee_id}}"
          outputParameters:
            - name: plan_name
              type: string
              mapping: "$.Benefit_Plan"
            - name: coverage_level
              type: string
              mapping: "$.Coverage_Level"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd5-impl-services1.workday.com/ccx/service/hasbro"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: benefits
          path: "/Benefits/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-benefits
              method: GET

Retrieves headcount data from Workday by department, returning employee count, open positions, and turnover rate.

naftiko: "0.5"
info:
  label: "Workday Headcount Report"
  description: "Retrieves headcount data from Workday by department, returning employee count, open positions, and turnover rate."
  tags:
    - hr
    - workforce
    - workday
capability:
  exposes:
    - type: mcp
      namespace: hr-reporting
      port: 8080
      tools:
        - name: get-headcount
          description: "Get headcount metrics from Workday for a department."
          inputParameters:
            - name: department_id
              in: body
              type: string
              description: "The Workday department ID."
          call: "workday.get-headcount"
          with:
            department_id: "{{department_id}}"
          outputParameters:
            - name: employee_count
              type: integer
              mapping: "$.total_count"
            - name: open_positions
              type: integer
              mapping: "$.open_positions"
            - name: turnover_rate
              type: string
              mapping: "$.turnover_rate"
  consumes:
    - type: http
      namespace: workday
      baseUri: "https://wd2-impl-services1.workday.com/ccx/api/v1"
      authentication:
        type: bearer
        token: "$secrets.workday_token"
      resources:
        - name: headcount
          path: "/departments/{{department_id}}/headcount"
          inputParameters:
            - name: department_id
              in: path
          operations:
            - name: get-headcount
              method: GET

Uploads video to YouTube, creates a social post in HubSpot, updates content calendar in Airtable, and shares the link via Microsoft Teams.

naftiko: "0.5"
info:
  label: "YouTube Brand Content Pipeline"
  description: "Uploads video to YouTube, creates a social post in HubSpot, updates content calendar in Airtable, and shares the link via Microsoft Teams."
  tags:
    - content
    - youtube
    - hubspot
    - airtable
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: youtube-content
      port: 8080
      tools:
        - name: publish-brand-video
          description: "Orchestrate YouTube brand content publishing across YouTube, HubSpot, Airtable, and Teams."
          inputParameters:
            - name: video_title
              in: body
              type: string
              description: "The video title."
            - name: brand
              in: body
              type: string
              description: "The brand name."
          steps:
            - name: upload-video
              type: call
              call: "youtube.upload-video"
              with:
                title: "{{video_title}}"
                category: "Entertainment"
            - name: create-social
              type: call
              call: "hubspot.create-social-post"
              with:
                content: "Watch now: {{video_title}} - {{upload-video.url}}"
                campaign: "{{brand}}"
            - name: update-calendar
              type: call
              call: "airtable.create-record"
              with:
                table: "ContentCalendar"
                title: "{{video_title}}"
                url: "{{upload-video.url}}"
                status: "Published"
            - name: notify-team
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "content-team"
                text: "New {{brand}} video published: {{video_title}} - {{upload-video.url}}"
  consumes:
    - type: http
      namespace: youtube
      baseUri: "https://www.googleapis.com/upload/youtube/v3"
      authentication:
        type: bearer
        token: "$secrets.google_token"
      resources:
        - name: videos
          path: "/videos?part=snippet,status"
          operations:
            - name: upload-video
              method: POST
    - type: http
      namespace: hubspot
      baseUri: "https://api.hubapi.com"
      authentication:
        type: bearer
        token: "$secrets.hubspot_token"
      resources:
        - name: social-posts
          path: "/broadcast/v1/broadcasts"
          operations:
            - name: create-social-post
              method: POST
    - type: http
      namespace: airtable
      baseUri: "https://api.airtable.com/v0/appHasbro"
      authentication:
        type: bearer
        token: "$secrets.airtable_token"
      resources:
        - name: records
          path: "/ContentCalendar"
          operations:
            - name: create-record
              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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Uploads a product video to the Hasbro YouTube channel, creates a Salesforce content record, and shares the link to Microsoft Teams.

naftiko: "0.5"
info:
  label: "YouTube Product Video Publisher"
  description: "Uploads a product video to the Hasbro YouTube channel, creates a Salesforce content record, and shares the link to Microsoft Teams."
  tags:
    - marketing
    - video
    - youtube
    - salesforce
    - microsoft-teams
capability:
  exposes:
    - type: mcp
      namespace: video-publishing
      port: 8080
      tools:
        - name: publish-product-video
          description: "Upload a product video to YouTube and notify teams."
          inputParameters:
            - name: video_title
              in: body
              type: string
              description: "The video title."
            - name: product_sku
              in: body
              type: string
              description: "The related product SKU."
            - name: video_url
              in: body
              type: string
              description: "The video source URL."
          steps:
            - name: upload-video
              type: call
              call: "youtube.upload-video"
              with:
                title: "{{video_title}}"
                description: "Official Hasbro product video for {{product_sku}}"
                source_url: "{{video_url}}"
            - name: create-content-record
              type: call
              call: "salesforce.create-content"
              with:
                title: "{{video_title}}"
                type: "YouTube Video"
                url: "{{upload-video.watch_url}}"
                product_sku: "{{product_sku}}"
            - name: share-link
              type: call
              call: "msteams.send-message"
              with:
                channel_id: "marketing-content"
                text: "New product video published: {{video_title}}. Watch: {{upload-video.watch_url}}."
  consumes:
    - type: http
      namespace: youtube
      baseUri: "https://www.googleapis.com/upload/youtube/v3"
      authentication:
        type: bearer
        token: "$secrets.youtube_token"
      resources:
        - name: videos
          path: "/videos?uploadType=resumable&part=snippet,status"
          operations:
            - name: upload-video
              method: POST
    - type: http
      namespace: salesforce
      baseUri: "https://hasbro.my.salesforce.com/services/data/v58.0"
      authentication:
        type: bearer
        token: "$secrets.salesforce_token"
      resources:
        - name: content
          path: "/sobjects/Content__c"
          operations:
            - name: create-content
              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/{{channel_id}}/channels/general/messages"
          inputParameters:
            - name: channel_id
              in: path
          operations:
            - name: send-message
              method: POST

Retrieves a Zendesk support ticket by ID, returning status, priority, assignee, and last update timestamp.

naftiko: "0.5"
info:
  label: "Zendesk Support Ticket Lookup"
  description: "Retrieves a Zendesk support ticket by ID, returning status, priority, assignee, and last update timestamp."
  tags:
    - support
    - zendesk
capability:
  exposes:
    - type: mcp
      namespace: zendesk-tickets
      port: 8080
      tools:
        - name: get-ticket
          description: "Look up a Zendesk support ticket by ID."
          inputParameters:
            - name: ticket_id
              in: body
              type: string
              description: "The Zendesk ticket ID."
          call: "zendesk.get-ticket"
          with:
            id: "{{ticket_id}}"
          outputParameters:
            - name: status
              type: string
              mapping: "$.ticket.status"
            - name: priority
              type: string
              mapping: "$.ticket.priority"
            - name: assignee
              type: string
              mapping: "$.ticket.assignee_id"
  consumes:
    - type: http
      namespace: zendesk
      baseUri: "https://hasbro.zendesk.com/api/v2"
      authentication:
        type: bearer
        token: "$secrets.zendesk_token"
      resources:
        - name: tickets
          path: "/tickets/{{id}}"
          inputParameters:
            - name: id
              in: path
          operations:
            - name: get-ticket
              method: GET

Creates a Zoom meeting and sends calendar invites via Microsoft Outlook.

naftiko: "0.5"
info:
  label: "Zoom Meeting Scheduler"
  description: "Creates a Zoom meeting and sends calendar invites via Microsoft Outlook."
  tags:
    - communications
    - meetings
    - zoom
    - microsoft-outlook
capability:
  exposes:
    - type: mcp
      namespace: meeting-scheduler
      port: 8080
      tools:
        - name: schedule-meeting
          description: "Create a Zoom meeting and send invites."
          inputParameters:
            - name: topic
              in: body
              type: string
              description: "Meeting topic."
            - name: start_time
              in: body
              type: string
              description: "Start time in ISO 8601."
            - name: attendee_emails
              in: body
              type: array
              description: "Attendee email list."
          steps:
            - name: create-meeting
              type: call
              call: "zoom.create-meeting"
              with:
                topic: "{{topic}}"
                start_time: "{{start_time}}"
            - name: send-invite
              type: call
              call: "outlook.send-email"
              with:
                to: "{{attendee_emails}}"
                subject: "Meeting: {{topic}}"
                body: "Join Zoom: {{create-meeting.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
    - type: http
      namespace: outlook
      baseUri: "https://graph.microsoft.com/v1.0/me"
      authentication:
        type: bearer
        token: "$secrets.msgraph_token"
      resources:
        - name: mail
          path: "/sendMail"
          operations:
            - name: send-email
              method: POST