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